2011-12-19 14 views
7

Tengo widget de campo de texto personalizado y muchos formularios en mi proyecto. Para utilizar este widget personalizado que necesito para escribir:global formfield_overriding en django

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

en todas sus formas admin.ModelAdmin, y eso es simplemente feo.

¿Hay alguna manera de escribirlo solo una vez y usar un widget personalizado en todos los formularios del proyecto?

Respuesta

7

No, no hay ningún gancho para anular widgets formfield en todo un proyecto.

Puede hacer que todas sus clases de administrador de modelo hereden de una subclase de admin.ModelAdmin, luego solo debe establecer formfield_overrides una vez.

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