Saltar al contenido

Hacer una clase de formulario Django con un número dinámico de campos

Ten en cuenta que en las ciencias informáticas un problema casi siempre tiene diferentes soluciones, pero nosotros mostraremos lo más óptimo y eficiente.

Solución:

Jacob Kaplan-Moss tiene un artículo extenso sobre campos de formulario dinámico: http://jacobian.org/writing/dynamic-form-generation/

Esencialmente, agrega más elementos al formulario self.fields diccionario durante la creación de instancias.

Aquí hay otra opción: ¿qué tal un formset? Dado que sus campos son todos iguales, eso es precisamente para lo que se utilizan los conjuntos de formularios.

El administrador de django usa FormSets + un poco de javascript para agregar líneas de longitud arbitraria.

class ColorForm(forms.Form):
    color = forms.ChoiceField(choices=(('blue', 'Blue'), ('red', 'Red')))

ColorFormSet = formset_factory(ColorForm, extra=0) 
# we'll dynamically create the elements, no need for any forms

def myview(request):
    if request.method == "POST":
        formset = ColorFormSet(request.POST)
        for form in formset.forms:
            print "You've picked 0".format(form.cleaned_data['color'])
    else:
        formset = ColorFormSet()
    return render(request, 'template', 'formset': formset))

JavaScript

    

Plantilla

    
formset.management_form

puedes hacerlo como

def __init__(self, n,  *args, **kwargs):
  super(your_form, self).__init__(*args, **kwargs)
  for i in range(0, n):
    self.fields["field_name %d" % i] = forms.CharField()

y cuando creas una instancia de formulario, solo haces

forms = your_form(n)

es solo la idea básica, puedes cambiar el código a lo que quieras. 😀

No se te olvide compartir esta crónica si lograste el éxito.

¡Haz clic para puntuar esta entrada!
(Votos: 2 Promedio: 4)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *