Anular atributos predeterminados de un formulario Django

En mi aplicación Django tengo varias formas diferentes, que son similares en estilo. Para no repetirme una y otra vez, trato de volver a escribir la configuración de formulario predeterminada.

Para empezar, quería establecer algunas configuraciones predeterminadas para cada formulario que uso en mi aplicación e intenté subclasificar el formulario django.forms .

class DefaultForm(forms.Form): error_css_class = 'alert' error_class = DivErrorList required_css_class = 'required' label_suffix = ':' auto_id = True class TechnicalSurveyForm(DefaultForm): location = forms.CharField(label='GPS Location') satellite = forms.ModelChoiceField(queryset=get_satellites(), empty_label=None) modem_sn = forms.CharField() 

En mi views.py llamaría al formulario simplemente con

 tsurvey = TechnicalSurveyForm() 

Desafortunadamente, las configuraciones que establecí en DefaultForm no están en su lugar (cuando uso TechnicalSurvey(auto_id = True, error_class = DivErrorList) son). Entonces, supongo que mi enfoque es totalmente incorrecto de alguna manera. ¿Puede alguien ayudarme?

Supongo que el __init__ de formularios. El formulario inicializa los atributos de un formulario. Debes anular el método __init__ y cambiar los atributos después de que Django haya hecho su trabajo.

EDITAR: De hecho, después de verificar el código fuente de django, puede ver que los atributos de un objeto de formulario se inicializan en la función __init__ . El método es visible en el github de django .

 class DefaultForm(forms.Form): def __init__(self, *args, **kwargs): super(forms.Form, self ).__init__(*args, **kwargs) self.error_css_class = 'alert' self.error_class = DivErrorList self.required_css_class = 'required' self.label_suffix = ':' self.auto_id = True 

Para principiantes de Python.

Este comportamiento es totalmente normal. Todos los atributos con el mismo nombre declarado en la statement de clase (como en el ejemplo del autor) se anularán si también se definen en la función init. Hay una ligera diferencia entre estos dos tipos de statement de atributos.