我需要为Django Admin添加自定义视图。这应该类似于特定模型的标准ChangeList视图,但具有自定义结果集。 (我需要显示所有模型的日期或其他日期少于今天,但这并不是真正相关的。)
我可以这样做的一种方法是使用Admin queryset
方法,例如
class CustomAdmin(admin.ModelAdmin):
...
def queryset(self, request):
qs = super(CustomAdmin, self).queryset(request)
if request.path == 'some-url':
today = date.today()
# Return a custom queryset
else:
return qs
这确保......
问题是我不知道如何将some-url
绑定到标准的ChangeList视图。
答案 0 :(得分:5)
所以你想要一个第二个URL进入更改列表视图,这样你可以通过请求的URL检查它中的哪一个,然后相应地更改查询集? 只是模仿django.contrib.admin.options所做的事情,并将另一个URL添加到ModelAdmin。
应该是这样的:
class CustomAdmin(admin.ModelAdmin):
def get_urls(self):
def wrap(view):
def wrapper(*args, **kwargs):
kwargs['admin'] = self # Optional: You may want to do this to make the model admin instance available to the view
return self.admin_site.admin_view(view)(*args, **kwargs)
return update_wrapper(wrapper, view)
# Optional: only used to construct name - see below
info = self.model._meta.app_label, self.model._meta.module_name
urlpatterns = patterns('',
url(r'^my_changelist/$', # to your liking
wrap(self.changelist_view),
name='%s_%s_my_changelist' % info)
)
urlpatterns += super(CustomAdmin, self).get_urls()
return urlpatterns