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

发布于 2024-10-11 13:33:39 字数 359 浏览 0 评论 0原文

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

I'm trying to expose a Django model in admin using the ModelAdmin class. ModelAdmin seems to assume you use the same form for add and change. I'd like the add_view to use a simplified form that only lists a handful of required fields. After submission, it'll redirect to the change_view and use ModelForm's default form to render nearly all fields.

What's the easiest way to do this? I've inspected the code, but I don't see a clear way. ModelAdmin tends to refer to a single self.form reference in both the add_view and change_view. I'm thinking of overriding add_view(), but I don't want to reimplement all the code. It might be more efficient to override get_form(), but I don't see how to detect whether get_form() is being called during add_view or change_view.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

隐诗 2024-10-18 13:33:39

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

get_form() is passed an obj parameter when called during change_view. Simply detect that return the new form/tweak parameters as needed.

For example:


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)

Will force the form to only display the "url" field when adding and everything else otherwise.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文