[python] 두 필드를 “고유 한”커플로 정의하는 방법

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분야에서 속성으로 journal_id하고 volume_number있지만 작동하지 않습니다.



답변

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',)


답변

장고 2.2+

unique_together 보다 constraints기능을 사용하는 UniqueConstraint것이 좋습니다 .

Django 문서에서 unique_together:

대신 constraints 옵션과 함께 UniqueConstraint를 사용하십시오.
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')
        ]


답변