2011-10-10 7 views
6

Necesito "anular" algunos de los miembros de clase anidados de la clase base, mientras mantengo el resto intacto.
Esto es lo que hago:¿Cuál es una mejor manera de anular los miembros de clase anidados en 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 

De hecho, quiero InternApplicationForm.Meta ser exactamente igual que InternGenericForm.Meta, excepto que su exclude tupla debe contener un artículo más.

¿Cuál es una forma más hermosa de hacer esto en Python?
Ojalá no tuviera que escribir un código repetitivo como model = InternGenericForm.Meta.model que también es propenso a errores.

Respuesta

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 
Cuestiones relacionadas