2010-11-14 8 views
5

Interfejs API zgodnie z dokumentacją wydaje się osiągalny za pomocą prostego ManyToManyField ... czego mi brakuje?Jaką korzyść zapewnia Django-Taggit w prostym wprowadzaniu znaczników ManyToManyField()?

Próbka z dokumentacją Django Taggit:

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

    tags = TaggableManager() 

Następnie można użyć API jak tak ::

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

Odpowiedz

2

Prawdziwą zaletą nie jest w znalezieniu tagów obiektu, lecz raczej obiekty dla znacznika. A konkretnie, jeśli masz wiele typów obiektów, które mogą być oznaczone, wyobraź sobie:

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

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

Teraz znajdź mi wszystkie instancje obiektów oznaczonych „fioletowy”. Taggit sprawia, że ​​jest to o wiele łatwiejsze.

+2

W twoim przykładzie jedynym sposobem na uzyskanie wszystkich oznaczonych instancji będzie Tag.food_set.all(), Tag.wine_set.all()? Jeśli jestem całkiem pewny, że różne typy nie będą musiały być oznaczone, to czy ManyToManyField powinno być w porządku? – kliao

Powiązane problemy