有沒有辦法在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') ]