Django admin add_view 只呈现直到第一次显示 change_view
Django admin add_view only renders up until change_view is displayed for first time
我在使用 Django 的管理系统时遇到了一个奇怪的问题,我覆盖了 add_view 和 change_view 方法来显示用于添加和更改数据的不同字段。添加视图在显示更改视图之前完美运行,然后在尝试添加新数据时它将始终显示更改视图而不是添加视图。我正在使用 Django 1.9.4 的最新版本。我的 ModelAdmin class 非常简单:
@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)
我已禁用所有第 3 方应用程序,并且只使用 DummyCache。在显示更改视图后再次显示添加视图的唯一方法是重新启动站点。我已经检查过它是否正确调用了 add_view 方法,只是在那之后的某个时候出错并显示了 change_view。
我假设这不是一个错误,否则会有其他人抱怨它,所以我一定是做错了什么,但我看不出它是什么。
谢谢,
保罗
像这样修改 self.fields
、self.fieldsets
和 self.readonly_fields
是不安全的。您正在为未来的请求以及当前的请求更改它们。
您可以覆盖 get_fields
, get_fieldsets
, and get_readonly_fields
方法,而不是在 add_view
和 change_view
方法中修改这些属性。如果 obj
是 None,那么您正在添加一个对象。例如:
def get_fields(self, request, obj=None):
if obj is None:
return [<fields for add view>]
else:
return [<fields for change view>]
我在使用 Django 的管理系统时遇到了一个奇怪的问题,我覆盖了 add_view 和 change_view 方法来显示用于添加和更改数据的不同字段。添加视图在显示更改视图之前完美运行,然后在尝试添加新数据时它将始终显示更改视图而不是添加视图。我正在使用 Django 1.9.4 的最新版本。我的 ModelAdmin class 非常简单:
@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)
我已禁用所有第 3 方应用程序,并且只使用 DummyCache。在显示更改视图后再次显示添加视图的唯一方法是重新启动站点。我已经检查过它是否正确调用了 add_view 方法,只是在那之后的某个时候出错并显示了 change_view。
我假设这不是一个错误,否则会有其他人抱怨它,所以我一定是做错了什么,但我看不出它是什么。
谢谢,
保罗
像这样修改 self.fields
、self.fieldsets
和 self.readonly_fields
是不安全的。您正在为未来的请求以及当前的请求更改它们。
您可以覆盖 get_fields
, get_fieldsets
, and get_readonly_fields
方法,而不是在 add_view
和 change_view
方法中修改这些属性。如果 obj
是 None,那么您正在添加一个对象。例如:
def get_fields(self, request, obj=None):
if obj is None:
return [<fields for add view>]
else:
return [<fields for change view>]