我希望能够使模型在来自外键模型的值上是唯一的。不确定在django是否有这种可能。
例句:我有一个模特儿A:
class modelA(models.Model):
fieldA1 = models.AutoField(primary_key=True)
fieldA2 = models.CharField(max_length=20)
也包括模式B:
class modelB(models.Model):
fieldB1 = models.CharField(max_length=20)
fieldB2 = models.ForeignKey(modelA)
class Meta:
unique_together = ('fieldB1', 'fieldB2',<<'fieldA2'>>)
我想添加fieldA2作为B模型的unique_together子句中的一个属性,这在Django中可能吗?我不能那样做-
unique_together = ('fieldB1', 'fieldB2','modelA__fieldA2')
发布于 2016-06-28 08:30:55
你不能。数据库约束不能包含此类数据。在创建实例或编写验证程序之前,您必须以编程方式检查它。
发布于 2020-03-11 18:34:11
您可以像这样覆盖modelB
的clean
方法
class ModelB(models.Model):
fieldB1 = models.CharField(max_length=20)
fieldB2 = models.ForeignKey(modelA)
def clean(self):
"""
Validate 'fieldB1', 'fieldB2' and 'fieldB2__fieldA2' are unique together
"""
# first, check that foreign keys fields exist. Must use '_id', or else a RelatedObjectDoesNotExist error will be raised
if self.fieldB2_id and self.fieldB2.field_A2_id:
if self.__class__.objects.filter(fieldB1=self.fieldB1, fieldB2=self.fieldB2, fieldB2__fieldA2=self.fieldB2.fieldA2).exists():
raise ValidationError(
_('Instance of ModelB with fieldB1, fieldB2 and fieldB2.fieldA2 already exists.'),
code='unique_together',
)
https://stackoverflow.com/questions/38081310
复制相似问题