python - template - Django: Anulando__init__ para formularios personalizados
did you forget to register or load this tag (2)
He encontrado una solución here . 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)
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)