python – 定义一个自定义窗体,用于Django的ModelAdmin Add View

我正在尝试使用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().

最佳答案 在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”字段,否则显示其他所有内容.

点赞