我正在使用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)))
适用于过滤器()以及 exclude() Q(name_ icontains = x),Q(作者 _name_ < EM> icontains = X)。 但是,当我尝试将 exclude()与Q(标记 _name__icontains = x)一起使用时,它无效。
此致 克里斯蒂安
答案 0 :(得分:0)
我对taggit错综复杂并不是很精通,但是......看看代码,似乎“名称”是以懒惰的方式动态构建的。
因此,如果您没有明确填充查询,那么您将获得空请求,因此Q(tags__name__icontains=key)
将为空,exclude(...)
将与filter(not null)
类似。
尝试通过select_related()或类似的东西强制填充标记查询。
答案 1 :(得分:0)
我认为,它不受支持。我找到了这个链接: https://github.com/alex/django-taggit/issues/31