我正在创建一个Django应用程序并尝试在Django Web管理界面中包含更多搜索框以用于特定模型,以便用户可以同时搜索更多字段。例如,用户可以在一个搜索框中输入城市的名称,在另一个搜索框中输入街道的名称,并且在搜索'搜索'之后,在浏览器中显示具有相应城市和街道的所有模型实例。按钮被击中。默认管理员Web界面只有一个搜索框。我在change_list.html
文件中添加了三个搜索框,当我在浏览器的搜索框中输入一些数据并点击“搜索”时,会形成一个正确的网址(包含查询字符串)用于搜索的三个输入参数)。然后我在queryset
方法中捕获那些输入参数,我在我的类中覆盖了models.AdminModel
calss,执行查询集过滤并最终返回过滤后的查询集。现在,问题是在搜索过程完成后,网页(我的模型的Web界面)上没有显示过滤的查询集,它表示没有找到匹配项。但我绝对肯定我的过滤查询集包含数据,我在执行return
方法的queryset
命令之前在命令行中打印它,并打印出正确的数据。
这是我的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
为什么网络界面中没有显示过滤的查询集?
编辑:感谢我的朋友,我终于设法解决了这个问题。解决方案非常简单,我所要做的就是将queryset
方法的整个代码移动到get_search_results
方法,并沿着过滤后的查询集返回false
布尔参数(因为get_search_results
方法返回两个参数)。因此,如果有人想在Django中自定义搜索过程,则应使用get_search_results
方法。在那里,您可以访问查询字符串argumnets并以您希望的方式检索某些数据。
答案 0 :(得分:1)
我认为它应该是get_queryset
而不是queryset
方法。
def get_queryset(request):
#your code here
queryset = super(UkopcanjeAdmin, self).get_queryset(request)
if 'miesto' in request.GET:
print 'Yes'
return queryset
else:
print 'No'
Here是Django docs的简短解释。