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