查询集未在django管理界面中显示

时间:2014-11-27 15:25:58

标签: python django django-queryset

我正在创建一个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并以您希望的方式检索某些数据。

1 个答案:

答案 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的简短解释。

相关问题