Django: Anulando __init__ para formularios personalizados

Estoy creando un objeto de formulario personalizado en Django que tiene un método anulado __init__. El propósito de anular el método es generar dinámicamente cuadros desplegables basados ​​en los nuevos parámetros.

Por ejemplo,

class TicketForm(forms.Form): Type = Type.GetTicketTypeField() def __init__(self, data=None, files=None, auto_id='id_%s', prefix=None, initial=None, label_suffix=':', empty_permitted=False, ticket=None): if ticket: self.__class__.State = State.GetTicketStateField(ticket.Type) super(forms.BaseForm, self ).__init__(data=data, files=files, auto_id=auto_id, prefix=prefix, initial=initial, label_suffix=label_suffix, empty_permitted=empty_permitted) 

Esta solución no funciona. Parece que los campos se crean antes de llamar al __init__. Supongo que este problema sería bastante común. ¿Cuál sería la forma Django de manejar estas clases de problemas?

Puedes modificar dinámicamente tu formulario usando el self.fields dict. Algo como esto puede funcionar para usted:

 class TicketForm(forms.Form): Type = Type.GetTicketTypeField() def __init__(self, ticket, *args, **kwargs): super(TicketForm, self).__init__(*args, **kwargs) self.fields['state'] = State.GetTicketStateField(ticket.Type) 

He encontrado una solución aquí . Si hay una solución mejor, por favor envíe una respuesta.

 class TicketForm(forms.Form): Type = Type.GetTicketTypeField() def __init__(self, ticket=None, *args, **kwargs): super(TicketForm, self ).__init__(*args, **kwargs) if ticket: self.fields['State'] = State.GetTicketStateField(ticket.Type)