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

时间:2011-07-25 09:35:29

标签: 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

这确保......

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

1 个答案:

答案 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