Django taggit не работает исключить - PullRequest
0 голосов
/ 16 января 2012

Я использую Django-taggit и отлично работает для меня, но у исключения есть проблема.Ключевое слово - это строка типа «key1 key2 key3».Код:

keyword = form.cleaned_data['keyword']
qlist = lambda x: [Q(name__icontains=x), Q(author__name__icontains=x),Q(tags__name__icontains=x)]
item_list = Item.objects.distinct()
for key in keyword.split():
    if ('-'==key[0]):
        print 'exclude: %s'%(key[1:])
        item_list = item_list.exclude(reduce(operator.or_,qlist(key[1:])))
     else:
        print 'include: %s'%(key)
        item_list = item_list.filter(reduce(operator.or_,qlist(key)))

Отлично работает для filter () и для exclude () Q (name_ icontains = x), Q(автор 1010 * _NAME_ * icontains = х).Но когда я пытаюсь использовать exclude () с Q (теги _name__icontains = x), это не работает.

С уважением, Кристиан

Ответы [ 2 ]

0 голосов
/ 18 января 2012

Я думаю, это не поддерживается. Я нашел эту ссылку: https://github.com/alex/django-taggit/issues/31

0 голосов
/ 17 января 2012

Я не слишком разбираюсь в хитросплетениях taggit, но ... Глядя на код, кажется, что "имя" динамически создается ленивым способом.

Так что, если выне заполняя запрос явно, вы получите пустой запрос, поэтому Q(tags__name__icontains=key) будет пустым, а exclude(...) будет просто как filter(not null).

Попробуйте принудительно заполнить запрос тега через select_related () или что-то подобное.

...