我有一个标签模型,它必须有一个需要唯一的名称字段,但仅适用于该用户的标签。
因此,一个用户不能创建两个"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将来可能会被弃用。