3

Django の管理システムで奇妙な問題が発生し、add_view メソッドと change_view メソッドをオーバーライドして、データの追加と変更のために異なるフィールドを表示しています。追加ビューは、変更ビューが表示されるまで完全に機能します。その後、新しいデータを追加しようとすると、追加ビューではなく常に変更ビューが表示されます。Django 1.9.4 の最新リリース バージョンを使用しています。私の ModelAdmin クラスは非常に単純です。

@admin.register(Trigger)
class TriggerAdmin(admin.ModelAdmin):
    def add_view(self, request, **kwargs):
        self.fields = ('name', 'modules', 'trigger_event')
        self.filter_horizontal = ('modules',)
        return super(TriggerAdmin, self).add_view(request, **kwargs)

    def response_add(self, request, obj, **kwargs):
        return HttpResponseRedirect("../%s" % obj.id)

    def change_view(self, request, object_id, **kwargs):
        self.fieldsets = (
            (None, {'fields': ('name', 'modules')}),
            (_('Trigger'), {'fields': ('trigger_event', 'query', 'actions', 'is_active')})
        )
        self.readonly_fields = ('modules', 'trigger_event')
        return super(TriggerAdmin, self).change_view(request, object_id, **kwargs)

サードパーティのアプリをすべて無効にし、DummyCache のみを使用しています。変更ビューが表示された後に追加ビューを再度表示する唯一の方法は、サイトを再起動することです。add_view メソッドが正しく呼び出されていることを確認しましたが、その後のある時点で問題が発生し、代わりに change_view が表示されます。

これはバグではないと思います。そうでなければ、他の人がそれについて不平を言うので、何か間違ったことをしているに違いありませんが、それが何であるかわかりません。

ありがとう、

ポール

4

1 に答える 1

4

を変更するのは安全ではありself.fieldsませself.fieldsetsself.readonly_fields。現在のリクエストだけでなく、将来のリクエストのためにそれらを変更しています。

add_viewおよびメソッドでこれらの属性を変更する代わりに、 、、およびchange_viewをオーバーライドできます。が Noneの場合、オブジェクトを追加しています。例えば:get_fieldsget_fieldsetsget_readonly_fieldsobj

def get_fields(self, request, obj=None):
    if obj is None:
        return [<fields for add view>]
    else:
        return [<fields for change view>]
于 2016-03-31T10:50:42.793 に答える