【问题标题】:Django taggit doesn't work excludeDjango taggit 不起作用排除
【发布时间】: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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    因此,如果您没有显式填充查询,您将获得空请求,因此Q(tags__name__icontains=key) 将为空,exclude(...) 将与filter(not null) 一样。

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

    【讨论】:

      猜你喜欢
      • 2019-10-12
      • 1970-01-01
      • 1970-01-01
      • 2019-03-12
      • 1970-01-01
      • 1970-01-01
      • 2020-07-06
      • 2013-06-30
      • 2012-10-07
      相关资源
      最近更新 更多