如何將兩個字段「惟一」定義爲情侶

有沒有辦法在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_idvolume_number中將unique = True做爲屬性,但它不起做用。 get


#1樓

有一個簡單的解決方案叫作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',)

#2樓

Django 2.2+

請改用UniqueConstraintconstraints選項。 它提供的功能比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')
        ]
相關文章
相關標籤/搜索