在Q搜索中包括Django-Tagulous标签

时间:2019-03-02 20:15:03

标签: django tagging

我有一个博客样式的Django应用,并实现了Django-Tagulous来管理标签。

我有一个Post模型,其中包含“标题”和“内容”之类的标准字段,而且还有一个标签字段

tags = tagulous.models.TagField()

创建帖子后,标签可以正常工作并正确保存,现在我开始使用搜索功能,并且在post_list视图中具有以下内容

queryset_list = Post.objects.all().order_by('-timestamp')
query = request.GET.get("q")
if query:
    queryset_list = queryset_list.filter(
        Q(title__icontains=query)|
        Q(content__icontains=query)
    ).distinct()

我真的很想包括相关的标签,但是我不知道该怎么做。 没有人有任何指针如何在搜索中包含标签? 非常感谢您的帮助

1 个答案:

答案 0 :(得分:1)

是的,这在README on GitHub中已涉及。在幕后,<application>是指向模型TagModel [GitHub]TagField,因此我们可以查询多对多关系,例如:

ManyToManyField

因此,在此我们筛选出一个带有queryset_list = queryset_list.filter( Q(title__icontains=query) | Q(content__icontains=query) | Q(tags__name=query) ).distinct()的标记,该标记正是查询。但是我们可以添加__iexact [Django-doc]__contains [Django-doc]__icontains [Django-doc]查找,以使搜索更加复杂。例如:

name

将匹配所有带有标签的对象,其中名称包含一个子字符串,该字符串忽略大小写,等于我们查询的内容。因此,如果您用queryset_list = queryset_list.filter( Q(title__icontains=query) | Q(content__icontains=query) | Q(tags__name__icontains=query) ).distinct()标记了某些内容,那么它也将与查询'foobar'匹配。