为Django的ModelAdmin添加视图定义自定义表单
我想在Django的后台管理中使用ModelAdmin类来展示一个模型。ModelAdmin似乎默认是用同一个表单来处理添加和修改的操作。但我希望在添加新数据时,能用一个简化的表单,只显示几个必填字段。提交后,它会跳转到修改页面,并使用ModelForm的默认表单来显示几乎所有字段。
有什么简单的方法可以做到这一点吗?我查看了代码,但没有找到明确的解决方案。ModelAdmin在添加和修改页面都使用同一个self.form引用。我在考虑重写add_view(),但我不想重新实现所有的代码。也许重写get_form()会更有效,但我不知道怎么判断get_form()是在add_view还是change_view中被调用的。
1 个回答
8
当在 change_view
中调用 get_form()
时,会传入一个 obj
参数。你只需要检测这个参数,然后根据需要返回新的表单或调整参数。
举个例子:
class MyModelAdmin(admin.ModelAdmin):
def get_form(self, request, obj=None, **kwargs):
# hide every other field apart from url
# if we are adding
if obj is None:
kwargs['fields'] = ['url']
return super(MyModelAdmin, self).get_form(request, obj, **kwargs)
这样做会让表单在添加时只显示“url”这个字段,而其他字段则会在其他情况下显示。