2011-10-10 13 views
6

Ho bisogno di "sovrascrivere" alcuni membri della classe nidificata della classe base, mantenendo intatto il resto.
Questo è quello che faccio:Qual è un modo migliore per sovrascrivere i membri della classe nidificati in Python?

class InternGenericForm(ModelForm):     
    class Meta: 
     model = Intern 
     exclude = ('last_achievement', 'program',) 
     widgets = { 
      'name': TextInput(attrs={'placeholder': 'Имя и фамилия' }), 
     } 

class InternApplicationForm(InternGenericForm): 
    class Meta: 
     # Boilerplate code that violates DRY 
     model = InternGenericForm.Meta.model 
     exclude = ('is_active',) + InternGenericForm.Meta.exclude 
     widgets = InternGenericForm.Meta.widgets 

In realtà, voglio InternApplicationForm.Meta essere esattamente comeInternGenericForm.Meta, tranne che la sua exclude tupla deve contenere un elemento di più.

Qual è un modo più bello di farlo in Python?
Mi piacerebbe non aver bisogno di scrivere il codice boilerplate come model = InternGenericForm.Meta.model che è anche soggetto a errori.

risposta

13
class InternGenericForm(ModelForm):     
    class Meta: 
     model = Intern 
     exclude = ('last_achievement', 'program',) 
     widgets = { 
      'name': TextInput(attrs={'placeholder': 'Имя и фамилия' }), 
     } 

class InternApplicationForm(InternGenericForm): 
    class Meta(InternGenericForm.Meta): 
     exclude = ('is_active',) + InternGenericForm.Meta.exclude 
Problemi correlati