2010-11-14 22 views
5

L'API selon la documentation semble réalisable avec un simple ManyToManyField ... qu'est-ce qui me manque?Quel est le bénéfice de Django-Taggit sur une implémentation simple de ManyToManyField()?

Exemple de documentation Django-Taggit:

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

    tags = TaggableManager() 

Ensuite, vous pouvez utiliser l'API comme si ::

>>> 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>] 

Répondre

2

L'avantage réel n'est pas à trouver les balises d'un objet, mais plutôt les objets pour une étiquette. Et plus précisément, si vous avez plusieurs types d'objets qui peuvent être étiquetée, imaginez:

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

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

me trouvent maintenant toutes les instances d'objets étiquetés « violet ». Taggit rend beaucoup plus facile de le faire.

+2

Donc, dans votre exemple, la seule façon d'obtenir toutes les instances étiquetées serait Tag.food_set.all(), Tag.wine_set.all()? Si je suis sûr que différents types n'auront pas besoin d'être marqués, alors un ManyToManyField devrait être correct? – kliao