我正在创建一个Django应用程序,并尝试在Django web管理界面中为特定模型包含更多的搜索框,以便用户可以同时搜索更多字段。例如,用户可以在一个搜索框中输入城市名称,在另一个搜索框中输入街道名称,在单击“搜索”按钮后,浏览器中会显示具有相应城市和街道的所有模型实例。默认管理web界面只有一个搜索框。我在change_list.html
文件中添加了三个搜索框,当我在浏览器的这些搜索框中输入一些数据并点击“search”时,就会形成一个正确的URL(查询字符串包含这三个可以完成搜索的输入参数)。然后,我在扩展了models.AdminModel
calss的类中重写了queryset
方法中的输入参数,执行查询集过滤,最后返回过滤后的queryset。现在,问题是,在搜索过程完成后,过滤后的查询集根本没有显示在web页面上(我的模型的web界面),它表示没有找到匹配项。但我可以肯定,我的过滤查询集包含数据线索,我在命令行中打印它,就在执行queryset
方法的return
命令之前,它打印了正确的数据。在
以下是我的queryset
方法:
def queryset(self, request):
qs = super(UkopcanjeAdmin, self).queryset(request)
if "mjesto" in request.GET:
lokacija = request.GET.get('mjesto',None)
if lokacija:
qs = qs.filter(mjesto__icontains=lokacija)
if "ulica" in request.GET:
ulica = request.GET.get('ulica',None)
if ulica:
qs = qs.filter(ulica__icontains=ulica)
if "naziv" in request.GET:
naziv = request.GET.get('naziv',None)
if naziv:
qs = qs.filter(naziv__icontains=naziv)
print qs #this prints correct filtered data
return qs
为什么过滤后的查询集不显示在web界面上?在
编辑:多亏了我的朋友,我终于解决了这个问题。解决方案非常简单,我所要做的就是将queryset
方法的整个代码移动到get_search_results
方法,并沿着过滤的queryset返回false
布尔参数(因为get_search_results
方法返回两个参数)。因此,如果有人想在Django中定制搜索过程,应该使用get_search_results
方法。在那里,您可以访问查询字符串argumnets并以您想要的方式检索一些数据。在
我认为应该是}方法。在
get_queryset
而不是{Here是Django文档的一些简短解释。在
相关问题 更多 >
编程相关推荐