1

djangoサイトで管理しているオブジェクトの1つは、データベースに1つのインスタンスしかありません。したがって、リストビューを変更して、この最初のオブジェクトの「編集」ページにリダイレクトするだけです。

つまり、基本的に/ 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)

また、リストリクエストに一致するようにURLを変更し、そこでリダイレクトを実行しようとしましたが、リストリクエストを完全なブランケット正規表現以外のもの、つまり(r /^.*$/)と一致させることができないようです。つまり、無限ループリダイレクトを取得するだけです。

4

2 に答える 2

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...)
于 2013-03-01T09:35:39.760 に答える
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
于 2013-02-27T13:06:42.900 に答える