问题:如何将两个“唯一”字段定义为一对
有没有一种方法可以将几个字段定义为Django中唯一的字段?
我有一张(期刊的)卷表,而我不希望同一期刊有一个以上的卷号。
class Volume(models.Model):
id = models.AutoField(primary_key=True)
journal_id = models.ForeignKey(Journals, db_column='jid', null=True, verbose_name = "Journal")
volume_number = models.CharField('Volume Number', max_length=100)
comments = models.TextField('Comments', max_length=4000, blank=True)
我试图将unique = True
as属性放在字段中journal_id
,volume_number
但是不起作用。
回答 0
有一个简单的解决方案称为unique_together,它可以完全满足您的要求。
例如:
class MyModel(models.Model):
field1 = models.CharField(max_length=50)
field2 = models.CharField(max_length=50)
class Meta:
unique_together = ('field1', 'field2',)
在您的情况下:
class Volume(models.Model):
id = models.AutoField(primary_key=True)
journal_id = models.ForeignKey(Journals, db_column='jid', null=True, verbose_name = "Journal")
volume_number = models.CharField('Volume Number', max_length=100)
comments = models.TextField('Comments', max_length=4000, blank=True)
class Meta:
unique_together = ('journal_id', 'volume_number',)
回答 1
Django 2.2以上
使用constraints
功能UniqueConstraint
优于unique_together。
从Django文档中获得unique_together
:
改用UniqueConstraint和Constraints选项。
UniqueConstraint提供的功能比unique_together还要多。
将来可能不推荐使用unique_together。
例如:
class Volume(models.Model):
id = models.AutoField(primary_key=True)
journal_id = models.ForeignKey(Journals, db_column='jid', null=True, verbose_name="Journal")
volume_number = models.CharField('Volume Number', max_length=100)
comments = models.TextField('Comments', max_length=4000, blank=True)
class Meta:
constraints = [
models.UniqueConstraint(fields=['journal_id', 'volume_number'], name='name of constraint')
]
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。