新版本的Django admin使用自定義對象的ChangeList視圖與自定義get_queryset方法。
正如你可以在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)
與重寫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 ChangeList
class 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']
正是我需要的,謝謝! – react