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 方法来做到这一点?
欢迎使用其他方式吗?
期望:
最终目标是:
- 从显示 0 个结果的页面开始
- 没有数据库activity
- 搜索文本输入重点
- 在一条消息下方,指示用户可以开始输入它要查找的内容。
谢谢。
您不能覆盖 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
问题:
我想在使用“?q=”(即没有值或空格)打开页面时强制执行 change_list_view,并且根本不执行查询来加载页面。
可能的方式:
我的问题是如何通过覆盖查询集、get_queryset 或 get_search_results 方法来做到这一点?
欢迎使用其他方式吗?
期望:
最终目标是:
- 从显示 0 个结果的页面开始
- 没有数据库activity
- 搜索文本输入重点
- 在一条消息下方,指示用户可以开始输入它要查找的内容。
谢谢。
您不能覆盖 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