[英]Django_Filters and queryset
大家好,我正在构建一个简单的 django 网站,用户可以在其中寻找长时间的游戏。 现在的问题是我无法弄清楚为什么使用 django_filters 库构建的过滤器不起作用。
如果您在家中的搜索栏中键入“Queen”,您将被重定向到 searchs.html,其中列出了 Queen 的所有 LP(仅 4 个)。 左边有一个过滤器。 如果您在表单中输入“kind”并提交,那么您应该只会看到专辑“Kind of Magic”。 这行不通。 我认为问题在于查询集“sp”:
class searchesView(TemplateView):
template_name = "search/searches.html"
def post(self, request, *args, **kwargs):
print('FORM POSTED WITH {}'.format(request.POST['srh']))
srch = request.POST.get('srh')
if srch:
sp = Info.objects.filter(Q(band__icontains=srch)) | Info.objects.filter(Q(disco__icontains=srch))
myFilter = InfoFilter(request.GET, queryset=sp)
sp = myFilter.qs
paginator = Paginator(sp, 10)
page_number = request.GET.get('page')
page_obj = paginator.get_page(page_number)
return render(self.request, 'search/searches.html', {'sp':sp, 'myFilter':myFilter,
'page_obj': page_obj
})
else:
return render(self.request, 'search/searches.html')
我认为问题在于查询集,因为那时我尝试构建一个 result.html 页面,我在该页面中列出了数据库中的所有 LP,并在上面应用了相同的过滤器,在这里它完美地工作:
def result(request):
result = Info.objects.all()
myFilter = InfoFilter(request.GET, queryset=result)
result = myFilter.qs
return render (request, 'search/result.html', {'result':result, 'myFilter':myFilter})
不同之处在于,在第一种情况下,我有一个带有特定查询集的 TemplateView,而在第二种情况下,我有一个带有不同查询集的简单 function。 有人知道问题可能是什么吗? 如果您想试用该网站,我已上传到 repl 上的代码: https://Django-Template.edwardradical.repl.co
非常感谢!
问题与这里的 POST/GET 混合有关。
您正在从此处的两个 post/get 字典中读取参数,这对于 go 来说不是一个很好的模式。
在这种情况下,对带有过滤器的 url 的 POST 请求应该会产生正确的结果,即:
POST /searches/?band=kind&disco=
{
srh: data
}
在当前的解决方案中,我认为 srh 不包含在帖子正文中,这会导致查询集中出现问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.