Django管理后台 - 自定义列表视图

5

我需要在Django管理员中添加一个自定义视图。这应该类似于某个模型的标准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个回答

5

所以你想要第二个URL,以便访问变更列表视图,从而通过请求的URL检查这两个中的哪一个,然后相应地更改查询集?只需模仿django.contrib.admin.options所做的,并向ModelAdmin添加另一个URL。

应该看起来像这样:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接