【问题标题】:Django Admin change_list forcing search_form to reject given seach keywordsDjango Admin change_list 强制 search_form 拒绝给定的搜索关键字
【发布时间】:2015-03-31 09:42:12
【问题描述】:

问题:

我想在使用“?q=”(即没有值或空格)打开页面时强制执行 change_list_view,并且根本不执行查询来加载页面。

可能的方式:

我的问题是如何通过覆盖查询集、get_queryset 或 get_search_results 方法来做到这一点?

欢迎任何其他方式?

期望:

最终目标是:

  • 从显示 0 个结果的页面开始
  • 没有数据库活动
  • 搜索文本输入聚焦
  • 在一条消息下方,指示用户可以开始键入它要查找的内容。

谢谢。

【问题讨论】:

    标签: django database django-templates django-admin


    【解决方案1】:

    您不能覆盖ModelAdmin.get_queryset(),因为它在编辑/删除视图中使用。所以你必须继承ChangeList 类并覆盖其中的get_queryset()

    from django.contrib import messages
    from django.contrib.admin.views.main import ChangeList
    
    class MyChangeList(ChangeList):
    
        def get_queryset(self, request):
            queryset = super(MyChangeList, self).get_queryset(request)
            if not request.GET.get('q', ''):
                messages.add_message(request, messages.INFO, 'Start typing.')
                queryset = queryset.none()
    
            return queryset
    
    
    class MyAdmin(admin.ModelAdmin):
    
        def get_changelist(self, request, **kwargs):
            return MyChangeList
    

    【讨论】:

    • 感谢这个 sn-p,它工作得很好,但是,现在其他东西也在使用数据库,关于如何找到谁在使用数据库的任何提示?
    • 使用userquerytime 字段创建模型并修改MyChangeList.get_queryset() 以将记录添加到具有request.userrequest.GET['q']timezone.now() 的表中,跨度>
    • 没关系,它正在加载侧边栏,我可以尝试删除侧边栏,只是为了快速加载搜索:),然后它将显示在下一页中:D.
    猜你喜欢
    • 1970-01-01
    • 2014-02-03
    • 2017-01-15
    • 1970-01-01
    • 2021-05-22
    • 2011-09-02
    • 2011-10-27
    • 2012-01-29
    • 2013-05-23
    相关资源
    最近更新 更多