我使用的是Django-taggit,對我來說工作正常,但排除有問題。 關鍵字是類似'key1 key2 key3'的字符串。該代碼是:Django taggit不工作排除
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)))
它工作正常的過濾器()併爲排除() Q(名_ icontains = X),Q(作者 _name_ icontains = X)。 但是,當我嘗試使用排除()與Q(標籤 _name__icontains = x)它不起作用。
問候, 克里斯蒂安
也許operator.or_有問題。有關詳細信息,請參閱[此處](http://stackoverflow.com/questions/8138919/trying-to-reduce-django-q-objects-with-operator-or-seems-to-result-in-reduction)。 – 2012-01-16 15:46:45
這不是問題(我猜),因爲我在django控制檯中運行並執行: 'Item.objects.all()。exclude(Q(tags__name__icontains = key))。distinct()' 而且它執行同樣,顯示所有元素沒有**排除** – cmaluenda 2012-01-16 16:38:52