2015-07-06 2 views
1

Я использую django-taggit для тегов.Как получить все объекты, чьи теги являются подмножествами тегов в списке Django-taggit

class Taggedwebsites(TaggedItemBase): 
    content_object = models.ForeignKey('website') 

class website(models.Model): 
     tags=TaggableManager(through=Taggedwebsites,blank=True) 

Теперь я хочу, чтобы все веб-сайты, чьи теги являются надмножеством из списка тегов, предоставляются динамически.

Например,

tag_list=['python','django','database'] 

Тогда я хочу, чтобы все объекты веб-сайта, которые должны иметь по крайней мере, эти три набора.

result=website.objects.filter(tags__name_on=tag_list).distinct() 

не работает, так как он не дает объект, чьи метки являются надмножеством tag_list.

Как выполнить этот запрос в фильтре?

ответ

0

В запросе "tags__name_on" слово 'on' не определено в django, вы должны использовать вместо него. Вы хотите объекты с объектами, которые должны иметь по крайней мере эти три набора, вы должны использовать параметр «in». Вот документация для querysets: docs.djangoproject.com/en/1.8/ref/models/querysets/#in

попробовать:

result=website.objects.filter(tags__name__in=tag_list).distinct() 

или:

result=website.objects.distinct(tags__name__in=tag_list) 
+0

Пожалуйста, объясните эти решения (и их различия) на английском языке. Благодарю. – jpaugh

+0

ok, у него есть не заданный запрос "tags__name_on" слово 'on' не определено в django, вы должны использовать вместо него. он хочет объекты с объектами, которые должны иметь по крайней мере эти три набора, он должен использовать параметр «in». вот документация для запросов: https://docs.djangoproject.com/en/1.8/ref/models/querysets/#in – Hetdev

+0

Спасибо за объяснение. Тем не менее, я пытался сказать, что вы должны улучшить ответ, чтобы объяснить, как работает решение. Это делает ваш ответ более понятным и может сделать его полезным для большего количества людей, чем только оригинальный плакат. Благодарю. – jpaugh