【问题标题】:Including Django-Tagulous tags in a Q Search在 Q 搜索中包含 Django-Tagulous 标签
【发布时间】:2019-03-02 20:15:03
【问题描述】:

我有一个博客风格的 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()

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

【问题讨论】:

    标签: django tagging


    【解决方案1】:

    是的,这在README on GitHub 中有介绍。在窗帘后面,TagField 是一个ManyToManyField,它指向一个模型TagModel [GitHub],因此我们可以查询多对多关系,例如:

    queryset_list = queryset_list.filter(
        Q(title__icontains=query) |
        Q(content__icontains=query) |
        Q(tags__name=query)
    ).distinct()

    因此,我们在这里过滤出带有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' 匹配。

    【讨论】:

      猜你喜欢
      • 2021-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-20
      • 2017-04-06
      • 1970-01-01
      • 2017-10-14
      • 2015-06-22
      相关资源
      最近更新 更多