管理员中的Django自定义列表视图

时间:2013-02-26 21:20:35

标签: python django django-admin

我在django网站上管理的其中一个对象在数据库中只有一个实例。因此,我想更改列表视图,只需重定向到“编辑”即可。第一个对象的页面。

所以基本上当你点击/ admin / my_site / widgets我想重定向到/ admin / my_site / widget / 1。我已经尝试过自定义视图,自定义模板等,但我无法找到一种简单的方法(或者就此而言的任何方式)。

这几乎就像我想做这样的事情(没有工作因为我无法弄清楚如何更改列表视图):

class WidgetAdmin(admin.ModelAdmin):
    def list_view(self, request):
        widget = Widget.objects.all()[0]
        return HttpResponseRedirect('/admin/my_site/widget/%s' % widget.id)

我还尝试更改网址以匹配列表请求并在那里进行重定向,但我似乎无法将列表请求与完整的一致性正则表达式匹配, ie(r /^.*$/)这意味着我只是得到一个无限循环重定向。

2 个答案:

答案 0 :(得分:1)

我需要同样的事情。我使用ModelAdmin中的changelist_view解决了它略有不同。使用您的示例,它看起来像:

class MySingleEditAdmin(admin.ModelAdmin):
   def changelist_view(self, request, extra_context=None):
       object, created = self.get_my_object()
       url = reverse('admin:%s_%s_change' %(object._meta.app_label, object._meta.module_name),  args=[object.id] )
       return HttpResponseRedirect(url)


class WidgetAdminAdmin(MySingleEditAdmin):
   def get_my_object(self):
       return Widget.objects.get_or_create(pk=1, ...default_data...)

答案 1 :(得分:0)

好的,这就是我如何整理出来的。

class WidgetAdmin(admin.ModelAdmin):
    def list_view(self, request):
        widget = Widget.objects.all()[0]
        return HttpResponseRedirect('/admin/my_site/widget/%s' % widget.id)

    def get_urls(self):
        from django.conf.urls.defaults import *
        urls = super(WidgetAdmin, self).get_urls()
        my_urls = patterns('',
                    (r'^$', admin.site.admin_view(self.list_view))
                )
        return my_urls + urls
相关问题