如何在Django ORM中创建M2M关系表的UniqueConstraint


class MyChoices(models.IntegerChoices):
CHOICE_A = 1
CHOICE_B = 2

class MyModelA(models.Model):
choice = models.IntegerField(choices=MyChoices.choices)
payload = models.CharField(...)

class MyModelB(models.Model):
models_a = models.ManyToManyRelationshipField(MyModelA, ...)
payload = models.CharField(...)

有没有一种方法可以在app_my_model_b_my_model_a表上创建一个具有MyModelA.choice字段和MyModelB主键字段的UniqueConstraint

您可以将模型定义为through=…模型[Django-doc]:

class MyChoices(models.IntegerChoices):
CHOICE_A = 1
CHOICE_B = 2

class MyModelA(models.Model):
choice = models.IntegerField(choices=MyChoices.choices)

class MyModelB(models.Model):
models_a = models.ManyToManyRelationshipField(MyModelA,through='MyModelC')
class MyModelC(models.Model):
model_a = models.ForeignKey(MyModelA, on_delete=models.CASCADE)
model_b = models.ForeignKey(MyModelB, on_delete=models.CASCADE)
class Meta:
constraints = [
models.UniqueConstraint(fields=['model_a', 'model_b'], name='unique_a_b')
]

最新更新