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(...)

Is there a way I can create a UniqueConstraint on app_my_model_b_my_model_a table with MyModelA.choice field and MyModelB primary key field?

score:0

You can define a model as through=… model [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')
        ]

Related Query