Django 将模型的记录配置为唯一,而不是相互重复
我有一个标签模型,它与具有多对多关系的文章相关:Django 将模型的记录配置为唯一,而不是相互重复,django,Django,我有一个标签模型,它与具有多对多关系的文章相关: class Tag(models.Model): owner = models.ForeignKey(User,on_delete=models.CASCADE) name = models.CharField(max_length=50) def __str__(self): return self.name class Meta: ordering = ("id",) clas
class Tag(models.Model):
owner = models.ForeignKey(User,on_delete=models.CASCADE)
name = models.CharField(max_length=50)
def __str__(self):
return self.name
class Meta:
ordering = ("id",)
class Article(models.Model):
tags = models.ManyToManyField(Tag, blank=True)
owner = models.ForeignKey(User, on_delete=models.CASCADE)
...
我想确保标签是唯一的,不重复,但发现这很困难
In [39]: article.tags.create(name="django", owner=article.owner)
Out[39]: <Tag: django>
In [40]: article.tags.create(name="django", owner=article.owner)
Out[40]: <Tag: django>
In [41]: article.tags.create(name="django", owner=article.owner)
Out[41]: <Tag: django>
In [42]: article.tags.all()
Out[42]: <QuerySet [<Tag: django>, <Tag: django>, <Tag: django>, <Tag: django>, <Tag: django>]>
In [43]: Tag.objects.all()
Out[43]: <QuerySet [<Tag: django>, <Tag: django>, <Tag: django>, <Tag: django>, <Tag: django>, '...(remaining elements truncated)...']>
如何将标记的重新编码配置为唯一性?可以通过在字段定义中添加unique=True来指定唯一性,例如:
name = models.CharField(max_length=50, unique=True)
或同时将元属性unique_用于多个字段上的约束,例如:
class Meta:
ordering = ("id",)
unique_together = ("name", "owner")