Django admin:添加自定义列表视图的最佳方法是什么?

时间:2010-12-26 15:06:58

标签: python django django-admin custom-view

我想在管理员中提供与changelist_view()非常相似的自定义视图,但没有指向编辑表单视图的链接。用户将能够选择列表中的项目并应用操作,就像在更改列表表单中一样,但他们无权访问编辑表单。

我认为ModelAdmin类中的结构应该是这样的:

class ProductAdmin(admin.ModelAdmin):
    def get_urls(self):
        urls = super(ProductAdmin, self).get_urls()
        urls += patterns('',
            (r'^selectlist/$', self.selectlist_view)
        )
        return urls

    def selectlist_view(self):
        return render_to_response(...)

要返回的视图与ModelAdmin.changelist_view()非常相似。什么是最好和干的方法呢?

2 个答案:

答案 0 :(得分:3)

以下自定义ModelAdmin是迄今为止我能想出的最佳解决方案:

class UserModelAdmin(ModelAdmin):
    def get_urls(self):
        urls = super(UserModelAdmin, self).get_urls()
        info = self.model._meta.app_label, self.model._meta.module_name
        select_list_url = patterns('',
            url(r'^selectlist/$', self.selectlist_view, 
                name='%s_%s_select' % info)
        )
        return select_list_url + urls

    def selectlist_view(self, request, extra_context=None):
        temp_list_display_links = self.list_display_links
        self.list_display_links = (None, )
        response = self.changelist_view(request, extra_context)
        self.list_display_links = temp_list_display_links
        return response

答案 1 :(得分:3)