有没有办法在Django中定义几个字段是惟一的? spa
我有一个卷(期刊)表,我不想要同一期刊的一个卷号。 code
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)
我试图在字段journal_id
和volume_number
中将unique = True
做为属性,但它不起做用。 get
有一个简单的解决方案叫作unique_together ,它能够彻底知足您的需求。 it
例如: io
class MyModel(models.Model): field1 = models.CharField(max_length=50) field2 = models.CharField(max_length=50) class Meta: unique_together = ('field1', 'field2',)
在你的状况下: class
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',)
请改用UniqueConstraint
和constraints
选项。 它提供的功能比unique_together
更多,未来可能会弃用。 model
例如: bug
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') ]