2010-11-14 49 views
5

根據文檔的API似乎可以通過一個簡單的ManyToManyField實現...我錯過了什麼?從Django的Taggit文檔Django-Taggit爲簡單的ManyToManyField()實現標記提供了什麼好處?

樣品:

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

    tags = TaggableManager() 

然後你可以使用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>] 

回答

2

真正的優勢不在於找到一個對象的標籤,而是標籤的對象。具體來說,如果您有多種類型的可以標記的對象,請考慮:

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

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

現在找到所有標記爲「紫色」的對象實例。 Taggit使得這樣做更容易。

+2

那麼在你的例子中,獲取所有標記實例的唯一方法是Tag.food_set.all(),Tag.wine_set.all()?如果我確定不需要標記不同的類型,那麼ManyToManyField應該沒問題? – kliao 2010-11-15 15:10:25

相關問題