from django.forms import ChoiceField list_of_choices = ( (1, 'Choice 1'), (2, 'Choice 2'), (3, 'Choice 3'), # ... (n, 'Choice n'), ) class MyForm(forms.Form): my_choice_field = ChoiceField(choices = list_of_choices)
Entonces, cuando nosotros enviamos nuestra opción en el formulario, Django comprueba que sea una opción válida, pero existen situaciones en las que esta auto-validación no es lo que deseamos, por ejemplo, en caso de que usemos un 'Selector dinámico' que obtiene sus campos a través de Ajax.
En esta situación, lo que podemos hacer es crear un nuevo campo que herede de ChoiceField, pero que incluya una validación personalizada, sobre-escribiendo a la que viene por defecto, lo que nos quedaría de la siguiente manera:
from django.forms import ChoiceField class LazyChoiceField(ChoiceField): def __init__(self, choices=(), required=True, widget=None, label=None, initial=None, help_text=None, *args, **kwargs): super(LazyChoiceField, self).__init__(required=required, widget=widget, label=label, initial=initial, help_text=help_text, *args, **kwargs) def valid_value(self, value): # aqui va nuestra nueva validacion # en caso de ser correcta, retorna True return True opciones = ( (1, 'Choice 1'), (2, 'Choice 2'), (3, 'Choice 3'), # ... (n, 'Choice n'), ) class MyForm(forms.Form): my_choice_field = LazyChoiceField(choices = opciones)
>> Visto en: ikraftsoft
0 comentarios:
Publicar un comentario en la entrada