Django Admin change_list 强制 search_form 拒绝给定的搜索关键字

Django Admin change_list forcing search_form to reject given seach keywords

问题:

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

可能的方式:

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

欢迎使用其他方式吗?

期望:

最终目标是:

谢谢。

您不能覆盖 ModelAdmin.get_queryset(),因为它在 edit/delete 视图中使用。所以你必须继承 ChangeList class 并覆盖其中的 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