Django 中的全局 formfield_overriding

发布于 2024-12-22 10:25:08 字数 241 浏览 0 评论 0原文

我的项目中有自定义文本字段小部件和许多表单。要使用这个自定义小部件,我需要

formfield_overrides = {
    TextField: {'widget': CustomTextFieldWidget},
}

在每个 admin.ModelAdmin 表单中编写: ,这很丑陋。

有没有办法只编写一次并在项目中的所有表单中使用自定义小部件?

I have custom textfield widget and many form in my project. To use this custom widget i need to to write:

formfield_overrides = {
    TextField: {'widget': CustomTextFieldWidget},
}

in every admin.ModelAdmin form, and that's just ugly.

Is there a way to write it just once and use custom widget across all forms in project?

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

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

发布评论

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

评论(1

送君千里 2024-12-29 10:25:08

不,没有钩子可以覆盖整个项目中的表单域小部件。

您可以使所有模型管理类继承自 admin.ModelAdmin 的子类,然后只需设置 formfield_overrides 一次。

class MyModelAdmin(admin.ModelAdmin):
    """
    This is the parent class that all model 
    admins in the project inherit from
    """
    formfield_overrides = {
        TextField: {'widget': CustomTextFieldWidget},
    }

class AppleAdmin(MyModelAdmin):
    ...

class BananaAdmin(MyModelAdmin):
    ...

#etc

No, there is no hook to override formfield widgets across an entire project.

You could make all of your model admin classes inherit from a subclass of admin.ModelAdmin, then you only have to set formfield_overrides once.

class MyModelAdmin(admin.ModelAdmin):
    """
    This is the parent class that all model 
    admins in the project inherit from
    """
    formfield_overrides = {
        TextField: {'widget': CustomTextFieldWidget},
    }

class AppleAdmin(MyModelAdmin):
    ...

class BananaAdmin(MyModelAdmin):
    ...

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