Django taggit不能排除

时间:2012-01-16 15:30:45

标签: django django-taggit

我正在使用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)一起使用时,它无效。

此致 克里斯蒂安

2 个答案:

答案 0 :(得分:0)

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

因此,如果您没有明确填充查询,那么您将获得空请求,因此Q(tags__name__icontains=key)将为空,exclude(...)将与filter(not null)类似。

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

答案 1 :(得分:0)

我认为,它不受支持。我找到了这个链接: https://github.com/alex/django-taggit/issues/31