Django-Taggit对标记的简单ManyToManyField()实现有什么好处?

kli*_*iao 5 tags django tagging

根据文档的API似乎可以通过简单的ManyToManyField实现......我缺少什么?

来自Django-Taggit文档的示例:

class Food(models.Model):
    # ... fields here

    tags = TaggableManager()
Run Code Online (Sandbox Code Playgroud)

然后你可以像这样使用API​​ ::

>>> apple = Food.objects.create(name="apple")
>>> apple.tags.add("red", "green", "delicious")
>>> apple.tags.all()
[<Tag: red>, <Tag: green>, <Tag: delicious>]
>>> apple.tags.remove("green")
>>> apple.tags.all()
[<Tag: red>, <Tag: delicious>]
>>> Food.objects.filter(tags__name__in=["red"])
[<Food: apple>, <Food: cherry>]
Run Code Online (Sandbox Code Playgroud)

小智 3

真正的优势不在于找到对象的标签,而在于找到标签的对象。具体来说,如果您有多种类型的可以标记的对象,请想象:

class Food(models.Model):
   tags = models.ManyToManyField(Tag)

class Wine(models.Model):
   tags = models.ManyToManyField(Tag)
Run Code Online (Sandbox Code Playgroud)

现在找到标记为“紫色”的对象的所有实例。Taggit 让这一切变得更加容易。

  • 因此,在您的示例中,获取所有标记实例的唯一方法是 Tag.food_set.all()、Tag.wine_set.all()?如果我很确定不需要标记不同的类型,那么 ManyToManyField 应该没问题,对吗? (2认同)