2010-11-14 17 views
5

Belgelere göre API basit bir ManyToManyField ile elde edilebilir görünüyor ... ne eksik? Django-Taggit belgelerindenDjango-Taggit, etiketlemenin basit bir ManyToManyField() uygulaması üzerinden ne gibi bir fayda sağlar?

Örnek:

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

    tags = TaggableManager() 

Sonra gibi API kullanabilirsiniz böylece ::

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

cevap

2

gerçek avantajı bir nesnenin etiketleri bulmakta değil, daha ziyade bir etiket için nesneler. Etiketlediğiniz edilebilir nesnelerin birden fazla türde varsa özellikle, hayal:

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

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

Şimdi bana "mor" etiketlenen nesneler tüm örneklerini bulabilirsiniz. Taggit bunu yapmak için çok daha kolay hale getirir.

+2

Örneğinizde, tüm etiketli örnekleri almanın tek yolu Tag.food_set.all(), Tag.wine_set.all()? Farklı türlerin etiketlenmeye gerek duymayacağından eminsem, o zaman ManyToManyField doğru yapılmalı mı? – kliao