Как получить все объекты, чьи теги являются подмножеством тегов в списке 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.

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


person Ashish Gupta    schedule 06.07.2015    source источник


Ответы (1)


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

пытаться:

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

or:

result=website.objects.distinct(tags__name__in=tag_list)
person Hetdev    schedule 17.07.2015
comment
Пожалуйста, объясните эти решения (и их различия) на английском языке. Спасибо. - person jpaugh; 18.07.2015
comment
хорошо, у него есть неопределенные теги запроса __name_on, слово «on» не определено в django, вместо этого вы должны использовать in. ему нужны объекты с объектами, которые должны иметь по крайней мере эти три набора, он должен использовать параметр 'in'. вот документация для наборов запросов: docs.djangoproject.com/en /1.8/ref/models/querysets/#in - person Hetdev; 21.07.2015
comment
Спасибо за объяснение. Однако я пытался сказать, что вы должны улучшить свой ответ, чтобы объяснить, как работает решение. Это делает ваш ответ более понятным и может сделать его полезным для большего количества людей, чем просто исходный постер. Спасибо. - person jpaugh; 21.07.2015
comment
Я получаю DatabaseError «более одной строки, возвращенной подзапросом, используемым в качестве выражения» - person Forethinker; 18.02.2017
comment
@Forethinker, вероятно, потому, что вы используете .get в запросе. - person Hetdev; 19.02.2017