我有一个标记模型,该模型必须具有一个唯一的名称字段,但只能用于该用户的标记。
这样一个用户不能创建两个“ 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')
答案 0 :(得分:0)
如果您使用的是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')
]
作为docs状态:
改为将UniqueConstraint与constraints选项一起使用。
UniqueConstraint提供的功能比unique_together还要多。将来可能不推荐使用unique_together。