Django Admin - 自定义更改列表视图

And*_*rea 5 django django-admin

我需要向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
Run Code Online (Sandbox Code Playgroud)

这确保......

问题是我不知道如何绑定some-url到标准的ChangeList视图.

Dan*_*air 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
Run Code Online (Sandbox Code Playgroud)