0

我正在使用 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(author _name_ icontains=x)。但是,当我尝试将exclude()与 Q(tags _name__icontains=x) 一起使用时,它不起作用。

问候, 克里斯蒂安

4

2 回答 2

0

I think, It is not supported. I found this link: https://github.com/alex/django-taggit/issues/31

于 2012-01-18T01:03:59.853 回答
0

我对复杂的 taggit 并不是很精通,但是...查看代码,似乎“名称”是以一种懒惰的方式动态构建的。

因此,如果您没有显式填充查询,您将获得空请求,因此Q(tags__name__icontains=key)将是空的,并且exclude(...)就像filter(not null).

尝试通过select_related()或类似的东西强制填充标签查询。

于 2012-01-17T00:14:14.610 回答