2016-03-31 3 views
2

Djangoの管理システムに問題があり、add_viewメソッドとchange_viewメソッドをオーバーライドして、データの追加と変更のためのさまざまなフィールドを表示しています。追加ビューは、変更ビューが表示されるまで完全に機能します。その後、新しいデータを追加しようとすると、追加ビューではなく変更ビューが常に表示されます。私はDjango 1.9.4の最新リリース版を使用しています。私のModelAdminクラスはかなり簡単です:Django admin add_viewは初めてchange_viewが表示されるまでレンダリングされます

@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を表示しています。

これはバグではないと思われますが、それ以外の人には不満があるので、私は間違ったことをする必要がありますが、それが何かを見ることはできません。

おかげで、

ポール

答えて

2

このようなself.fieldsself.fieldsetsself.readonly_fieldsを変更しても安全ではありません。現在のリクエストだけでなく将来のリクエストに対してもそれらを変更しています。

代わりadd_viewchange_view方法でこれらの属性を変更するには、代わりにget_fieldsget_fieldsets、およびget_readonly_fieldsをオーバーライドすることができます。 objがNoneの場合は、オブジェクトを追加します。例:

def get_fields(self, request, obj=None): 
    if obj is None: 
     return [<fields for add view>] 
    else: 
     return [<fields for change view>] 
関連する問題