2011-12-19 2 views
7

ho widget di campo di testo personalizzato e molti forma nel mio progetto. Per utilizzare questo widget personalizzato ho bisogno di scrivere:formfield_overriding globale nel Django

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

in ogni forma admin.ModelAdmin, e questo è solo brutto.

C'è un modo per scrivere una sola volta e utilizzare personalizzato widget di attraverso tutte le forme di progetto?

risposta

7

No, non c'è nessun gancio per ignorare formfield widget attraverso un intero progetto.

È possibile ereditare tutte le classi di gestione del modello da una sottoclasse di admin.ModelAdmin, quindi è sufficiente impostare formfield_overrides una volta.

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