如何在Django模型中的多个关系中设置UniqueConstraint

2024-09-30 14:23:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个模型(MyModel),它可以有多个User作为所有者(多个关系)。每个User可以拥有多个MyModel实例

其思想是用户可以通过API创建MyModel实例。但是我想设置一个约束,即用户创建的MyModel实例必须在用户拥有的MyModel内具有唯一的名称。但它在整个数据库中可能是非唯一的

我试图通过在多个字段中显式地将MyModelOwner定义为through模型来实现这一点,但我对如何处理UniqueConstraint感到困惑

class MyModel(models.Model):
    id = models.UUIDField(primary_key=True, editable=False, default=uuid.uuid4)
    name = models.CharField(
        max_length=1000,
        unique=True,
    )
    owner = models.ManyToManyField(
        User,
        related_name='+',
        through='MyModelOwner'
    )


class MyModelOwner(models.Model):
    my_model = models.ForeignKey(MyModel, on_delete=models.PROTECT)
    owner = models.ForeignKey(User, on_delete=models.PROTECT)

    class Meta:
        constraints = [
            UniqueConstraint(
                fields=['owner', 'my_model'],
                name='unique_my_model_owner'),
        ]

Tags: 实例用户name模型modelmodelsmyclass