中的Django admin中未显示Queryset

2024-09-28 23:29:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在创建一个Django应用程序,并尝试在Django web管理界面中为特定模型包含更多的搜索框,以便用户可以同时搜索更多字段。例如,用户可以在一个搜索框中输入城市名称,在另一个搜索框中输入街道名称,在单击“搜索”按钮后,浏览器中会显示具有相应城市和街道的所有模型实例。默认管理web界面只有一个搜索框。我在change_list.html文件中添加了三个搜索框,当我在浏览器的这些搜索框中输入一些数据并点击“search”时,就会形成一个正确的URL(查询字符串包含这三个可以完成搜索的输入参数)。然后,我在扩展了models.AdminModelcalss的类中重写了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并以您想要的方式检索一些数据。在


Tags: 数据django方法websearch参数get界面
1条回答
网友
1楼 · 发布于 2024-09-28 23:29:29

我认为应该是get_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文档的一些简短解释。在

相关问题 更多 >