新版本的Django admin使用带有自定义get_queryset方法的ChangeList视图使用自定义对象。
如您在Django来源中所见:
def changelist_view(self, request, extra_context=None): ... ChangeList = self.get_changelist(request) cl = ChangeList(request, self.model, list_display, list_display_links, list_filter, self.date_hierarchy, search_fields, list_select_related, self.list_per_page, self.list_max_show_all, self.list_editable, self) # Actions with no confirmation if (actions and request.method == 'POST' and 'index' in request.POST and '_save' not in request.POST): if selected: response = self.response_action(request, queryset=cl.get_queryset(request)) ...
您必须重写
self.get_changelist(request)并返回带有overridden的自定义ChangeList
get_queryset。
ModelAdmin.get_changelist:
def get_changelist(self, request, **kwargs): """ Returns the ChangeList class for use on the changelist page. """ return MyChangeList # PUT YOU OWERRIDEN CHANGE LIST HERE
MyChangeList:
from django.contrib.admin.views.main import ChangeListclass MyChangeList(ChangeList): def get_queryset(...): # if you want change get_queryset logic or add new filters ... def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) # if you want add some context variable which can be accessed by # {{ cl.some_context_varibale }} variable self.some_context_varibale = self.queryset.aggregate(Avg('price'))['price__avg']


