我有一个博客样式的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()
我真的很想包括相关的标签,但是我不知道该怎么做。 没有人有任何指针如何在搜索中包含标签? 非常感谢您的帮助
答案 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'
匹配。