如何使模型字段值唯一(唯一=真),但仅将其与该用户的其他模型进行比较



我有一个标签模型,它必须有一个需要唯一的名称字段,但仅适用于该用户的标签。

因此,一个用户不能创建两个"tagname"标签,但许多不同的用户可以(创建具有相同名称的标签(。

该字段在与用户相关的模型中必须是唯一的。

这是模型。

class User(AbstractUser):
      email = models.EmailField(unique=True)
class Tag(models.Model):
      name = models.CharField(max_length=30, unique=True)
      user = models.ForeignKey(User, null=True, on_delete=models.CASCADE, 
             related_name='tags')

如果你使用的是 Django 2.1 或更早版本,你可以像这样使用unique_together

class Tag(models.Model):
    name = models.CharField(max_length=30, unique=True) 
    user = models.ForeignKey(User, null=True, on_delete=models.CASCADE, related_name='tags')
    class Meta:
        unique_together = ['name', 'user']

如果你使用的是 Django 2.2,你可以使用 UniqueConstraint 而不是像这样unique_together

class Tag(models.Model):
    name = models.CharField(max_length=30, unique=True) 
    user = models.ForeignKey(User, null=True, on_delete=models.CASCADE, related_name='tags')
    class Meta:
        constraints = [
            models.UniqueConstraint(fields=['name', 'user'], name='give_it_some_name')
    ]

如文档所述:

请改用带有约束选项的"唯一约束"。

UniqueConstraint 提供了比 unique_together 更多的功能,unique_together将来可能会被弃用。

最新更新