【问题标题】:Queryset not displayed in django admin interface查询集未显示在 django 管理界面中
【发布时间】:2014-11-27 15:25:57
【问题描述】:

我正在创建一个 Django 应用程序并尝试在 Django Web 管理界面中为特定模型包含更多搜索框,以便用户可以同时搜索更多字段。例如,用户可以在一个搜索框中输入城市名称,在另一个搜索框中输入街道名称,点击“搜索”按钮后,所有具有对应城市和街道的模型实例都会显示在浏览器中。默认管理网页界面只有一个搜索框。我在change_list.html 文件中添加了三个搜索框,当我在浏览器的这些搜索框中输入一些数据并点击“搜索”时,会形成一个正确的 URL(查询字符串包含搜索应该使用的这三个输入参数做完了)。然后我在queryset 方法中捕获这些输入参数,这些输入参数已在我的扩展models.AdminModel calss 的类中覆盖,执行查询集过滤并最终返回过滤后的查询集。现在,问题是在搜索过程完成后,过滤后的查询集根本没有显示在网页(我的模型的 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 方法,然后过滤查询集返回false 布尔参数(因为get_search_results 方法返回两个参数)。所以如果有人想在 Django 中自定义搜索过程,应该使用get_search_results 方法。在那里你可以访问查询字符串参数并以你想要的方式检索一些数据。

【问题讨论】:

    标签: python django django-queryset


    【解决方案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 文档的一些简短解释。

    【讨论】:

    • 但是我可以在get_queryset方法中访问URL参数吗?
    • @programmer 我已经更新了我的答案。它将“请求”作为参数,您可以从那里访问 GET 和您需要的所有其他内容。
    • 我已将queryset 更改为get_queryset,但不幸的是行为是相同的。过滤后的查询集包含正确的数据,但它根本不显示在浏览器中......有趣的是,它只有在我的 URL 查询字符串中有一个参数时才能正常工作,例如 localhost:8000/admin/mainApp/some_model/? location=someCity,但如果我有多个参数,则不显示过滤后的查询集...
    猜你喜欢
    • 2013-07-09
    • 2012-12-13
    • 1970-01-01
    • 2010-12-14
    • 2011-01-27
    • 1970-01-01
    • 2017-08-12
    • 2020-06-17
    • 2014-04-26
    相关资源
    最近更新 更多