Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 将模型的记录配置为唯一,而不是相互重复_Django - Fatal编程技术网

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")