Python 调整wagtail标记过滤器以包括一个运算符,以便可以搜索多个标记
我的Wagtail模板上有一个工作搜索表单,可以根据页面的标记查找页面,但由于没有操作符(Python 调整wagtail标记过滤器以包括一个运算符,以便可以搜索多个标记,python,django,search,tags,wagtail,Python,Django,Search,Tags,Wagtail,我的Wagtail模板上有一个工作搜索表单,可以根据页面的标记查找页面,但由于没有操作符(和或或),一次只能搜索一个标记 有人能告诉我如何修改此代码以允许多个标记搜索吗 型号.py tag_posts = PostsPage.objects.live().public().order_by('-first_published_at') if request.GET.get('tag', None): tags = request.GET.get('tag')
和
或或
),一次只能搜索一个标记
有人能告诉我如何修改此代码以允许多个标记搜索吗
型号.py
tag_posts = PostsPage.objects.live().public().order_by('-first_published_at')
if request.GET.get('tag', None):
tags = request.GET.get('tag')
tag_posts = tag_posts.filter(tags__slug__in=[tags])
# Paginate all posts by 2 per page
paginator = Paginator(tag_posts, 2)
# Try to get the ?page=x value
page = request.GET.get("page")
try:
posts = paginator.page(page)
except PageNotAnInteger:
posts = paginator.page(1)
except EmptyPage:
posts = paginator.page(paginator.num_pages)
context["posts"] = tag_posts
return context
搜索页面.html
<form role="search" method="get" class="form-search" action="posts" method="get">
<div class="input-group">
<input type="text" class="form-control search-query" name="tag" placeholder="What are you after?" title="Search for:" />
<span class="input-group-btn">
<button type="submit" class="btn btn-default" name="" id="searchsubmit" value="">
<span class="btn btn-default">GO</span>
</button>
</span>
</div>
</form>
去
您需要允许用户输入多个由逗号(或您选择的任何其他分隔符)分隔的标记。下面的代码允许逗号、分号和竖线用作分隔符。它不使用空格作为分隔符,因为taggit的标记可以是多个单词
我会改变:
tag_posts = PostsPage.objects.live().public().order_by('-first_published_at')
if request.GET.get('tag', None):
tags = request.GET.get('tag')
tag_posts = tag_posts.filter(tags__slug__in=[tags])
致:
请注意,上面选择的是不区分大小写的标记名,而不是slug值
还应:
import re
from django.db.models.function import Lower
非常感谢你的回复,丹。我已经尝试过你的建议,但现在恐怕没有结果(我也确保导入re)。你有什么想法吗?谢谢你更新你的答案Dan,我现在可以使用搜索添加多个标记,只要我使用逗号,没有空格。但是,我需要一种删除空白并自动添加逗号的方法,否则用户将不会得到任何结果。你认为这是可能的,还是我必须重新考虑我的方法,也许使用haystack/elasticsearch?
import re
from django.db.models.function import Lower