django中的全局formfield_overriding

nuk*_*ukl 8 django django-forms

我在我的项目中有自定义文本字段小部件和许多表单.要使用此自定义小部件,我需要编写:

formfield_overrides = {
    TextField: {'widget': CustomTextFieldWidget},
}
Run Code Online (Sandbox Code Playgroud)

各种admin.ModelAdmin形式,这只是丑陋.

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

Ala*_*air 7

不,没有钩子可以覆盖整个项目中的formfield小部件.

您可以使所有模型管理类继承自子类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
Run Code Online (Sandbox Code Playgroud)