django - 在 Q 搜索中包含 Django-Tagulous 标签
问题描述
我有一个博客风格的 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()
我真的很想包含相关的标签,但不知道该怎么做。有没有人有任何指示如何在搜索中包含标签?我非常感谢您的帮助
解决方案
是的,这README
在 GitHub 上有所介绍。在幕后,TagField
是 aManyToManyField
指向一个模型TagModel
[GitHub],因此我们可以查询多对多关系,例如:
queryset_list = queryset_list.filter(
Q(title__icontains=query) |
Q(content__icontains=query) |
Q(tags__name=query)
).distinct()
因此,我们在这里过滤出一个带有 a 的标签,name
这正是查询。但是我们可以添加__iexact
[Django-doc]、__contains
[Django-doc]或__icontains
[Django-doc]查找,以使搜索更加复杂。例如:
queryset_list = queryset_list.filter(
Q(title__icontains=query) |
Q(content__icontains=query) |
Q(tags__name__icontains=query)
).distinct()
将匹配所有有标签的对象,其中名称包含一个子字符串,忽略大小写,等于我们查询的内容。因此,如果您用 标记了某些'foobar'
内容,那么它也将与查询匹配'Oo'
。
推荐阅读
- php - 用php创建变量的链接
- gdb - LLVM IR:向 GDB 公开变量?
- c++ - 私有静态变量:标头声明/.cpp 定义与文件范围
- ios - 一段时间后,健康应用程序忽略步骤
- python - 如何“自动发现” admin.py 文件的不同位置?
- java - Spring / JPA持久化一对多,子复合键与父键为空
- java - 将 JPG 图像作为位图上传到 Android Studio 时,图像的分辨率会丢失吗?
- spring - Spring 安全 jdbc 用户认证
- node.js - 将 Node.js 页面部署到 AWS Elastic Beanstalk 后出现“hell.php”错误和“502 Bad Gateway”错误
- c# - ASP.NET Core 2.1 - 脚手架不生成任何文件