为Django的ModelAdmin添加视图定义自定义表单

4 投票
1 回答
3383 浏览
提问于 2025-04-16 09:54

我想在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”这个字段,而其他字段则会在其他情况下显示。

撰写回答