2010-11-14 11 views
5

L'API in base alla documentazione sembra raggiungibile con un semplice ManyToManyField ... cosa mi manca?Quali vantaggi offre Django-Taggit rispetto a un'implementazione di tagging ManyToManyField() semplice?

d'esempio della documentazione Django-Taggit:

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

    tags = TaggableManager() 

Quindi è possibile utilizzare l'API in questo modo ::

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

risposta

2

Il vero vantaggio non è nel trovare i tag di un oggetto, ma piuttosto gli oggetti per un tag. E in particolare, se si dispone di più tipi di oggetti che possono essere taggati, immaginare:

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

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

Ora mi trovare tutte le istanze di oggetti taggati "viola". Taggit rende molto più facile farlo.

+2

Quindi nel tuo esempio, l'unico modo per ottenere tutte le istanze taggate sarebbe Tag.food_set.all(), Tag.wine_set.all()? Se sono abbastanza sicuro che non sarà necessario taggare diversi tipi, un ManyToManyField dovrebbe essere ok, giusto? – kliao

Problemi correlati