【发布时间】:2012-02-11 12:34:29
【问题描述】:
我正在使用 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_图标包含=x)。 但是,当我尝试将 exclude() 与 Q(tags_name__icontains=x) 一起使用时,它不起作用。
问候, 克里斯蒂安
【问题讨论】:
-
也许 operator.or_ 有问题。详情请见here。
-
这不是问题(我猜),因为我在 django 控制台中运行并执行:
Item.objects.all().exclude(Q(tags__name__icontains=key)).distinct()并且它也是如此,显示所有没有 exclude 的元素
标签: django django-taggit