定义自定义表单以在Django的ModelAdmin添加视图中使用

时间:2011-01-13 16:47:06

标签: python django django-admin

我正在尝试使用ModelAdmin类在管理中公开Django模型。 ModelAdmin似乎假设您使用相同的表单进行添加和更改。我希望add_view使用只列出少数必填字段的简化表单。提交后,它将重定向到change_view并使用ModelForm的默认表单来渲染几乎所有字段。

最简单的方法是什么?我已经检查了代码,但我没有看到明确的方法。 ModelAdmin倾向于在add_view和change_view中引用单个self.form引用。我正在考虑覆盖add_view(),但我不想重新实现所有代码。覆盖get_form()可能更有效,但我没有看到如何检测在add_view或change_view期间是否正在调用get_form()。

1 个答案:

答案 0 :(得分:7)

get_form()期间调用时,

obj会传递change_view个参数。只需检测到根据需要返回新的表单/调整参数。

例如:


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”字段,否则显示其他所有字段。