Formsets en Django es una forma avanzada de manejar múltiples formularios en una sola página web. En otras palabras, Formsets son un grupo de formularios en Django. Uno podría querer inicializar múltiples formularios en una sola página, todo lo cual puede involucrar múltiples requests POST, por ejemplo
from django import forms class GeeksForm(forms.Form): title = forms.CharField() pub_date = forms.DateField()
Ahora, uno podría querer permitir que el usuario cree artículos a la vez, por lo que si se piensa de manera convencional, se usan múltiples formularios y diferentes nombres para cada formulario para manejar datos en una sola página, pero esto complicaría tanto el código como la funcionalidad. Un formset es una capa de abstracción para trabajar con múltiples formularios en la misma página. Se puede comparar mejor con una cuadrícula de datos.
Ahora, para crear un formset de este GeeksForm ,
from django.forms import formset_factory GeeksFormSet = formset_factory(GeeksForm)
Creación y uso de conjuntos de formularios de Django
Ilustración de renderizar formularios de Django manualmente usando un ejemplo. Considere un proyecto llamado geeksforgeeks
que tiene una aplicación llamada geeks
.
Consulte los siguientes artículos para comprobar cómo crear un proyecto y una aplicación en Django.
En su aplicación geeks, cree un nuevo archivo llamado forms.py donde estaría creando todos sus formularios. Para crear un formulario de Django, debe usar Django Form Class . Demostremos cómo,
en su forms.py
Ingrese lo siguiente,
from django import forms # create a form class GeeksForm(forms.Form): title = forms.CharField() description = forms.CharField()
Expliquemos qué está sucediendo exactamente, el lado izquierdo indica el nombre del campo y, a la derecha, define varias funcionalidades de un campo de entrada correspondiente. La sintaxis de un campo se denota como
Sintaxis:
Field_name = forms.FieldType(attributes)
Ahora, para crear un formset simple de este formulario, muévase a views.py y cree uno formset_view
como se muestra a continuación.
from django.shortcuts import render # relative import of forms from .forms import GeeksForm # importing formset_factory from django.forms import formset_factory def formset_view(request): context ={} # creating a formset GeeksFormSet = formset_factory(GeeksForm) formset = GeeksFormSet() # Add the formset to context dictionary context['formset']= formset return render(request, "home.html", context)
Para representar el formset a través de HTML, cree un archivo html «home.html». Ahora vamos a editartemplates > home.html
<form method="POST" enctype="multipart/form-data"> {% csrf_token %} {{ formset.as_p }} <input type="submit" value="Submit"> </form>
Todo listo para verificar si nuestro conjunto de formularios funciona o no, visite http://localhost:8000/ .
.
Nuestro formset está funcionando completamente. Aprendamos cómo modificar este formset para usar características adicionales de este formset.
Cómo crear formularios múltiples usando Django Formsets
Los conjuntos de formularios de Django se utilizan para manejar múltiples instancias de un formulario. Uno puede crear múltiples formularios fácilmente usando el extra
atributo de Django Formsets. En geeks/views.py ,
from django.shortcuts import render # relative import of forms from .forms import GeeksForm # importing formset_factory from django.forms import formset_factory def formset_view(request): context ={} # creating a formset and 5 instances of GeeksForm GeeksFormSet = formset_factory(GeeksForm, extra = 5) formset = GeeksFormSet() # Add the formset to context dictionary context['formset']= formset return render(request, "home.html", context)
El argumento de palabra clave extra
hace múltiples copias del mismo formulario. Si uno quiere crear 5 formularios ingrese extra = 5
y de igual forma para los demás. Visite http://localhost:8000/ para verificar si se crean 5 formularios.
Manejo de múltiples formularios usando Django Formsets
Crear un formulario es mucho más fácil que manejar los datos ingresados en esos campos en el back-end. Intentemos demostrar cómo se pueden usar fácilmente los datos de un formset en una vista. Al intentar manejar formset, los formsets de Django requerían un argumento adicional {{ formset.management_data }} . Para obtener más información sobre los datos de gestión, visite Comprensión de ManagementForm .
en templates/home.html
,
<form method="POST" enctype="multipart/form-data"> <!-- Management data of formset --> {{ formset.management_data }} <!-- Security token --> {% csrf_token %} <!-- Using the formset --> {{ formset.as_p }} <input type="submit" value="Submit"> </form>
Ahora, para verificar cómo y qué tipo de datos se procesan, edite formset_view para imprimir los datos. en geeks/view.py
,
from django.shortcuts import render # relative import of forms from .forms import GeeksForm # importing formset_factory from django.forms import formset_factory def formset_view(request): context ={} # creating a formset and 5 instances of GeeksForm GeeksFormSet = formset_factory(GeeksForm, extra = 3) formset = GeeksFormSet(request.POST or None) # print formset data if it is valid if formset.is_valid(): for form in formset: print(form.cleaned_data) # Add the formset to context dictionary context['formset']= formset return render(request, "home.html", context)
Ahora intentemos ingresar datos en el conjunto de formularios a través de http://localhost:8000/
Presione enviar y los datos se mostrarán en la línea de comando donde se está ejecutando el servidor. Uno puede usar estos datos de cualquier manera conveniente ahora.
Formset es un material avanzado que se puede usar para resolver una serie de problemas, pero debe usarse con la sintaxis correcta y las validaciones de campo; de lo contrario, los conflictos y los errores interrumpirán el funcionamiento normal. Para obtener más información sobre Formsets, visite Documentación oficial de Formsets .
Publicación traducida automáticamente
Artículo escrito por NaveenArora y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA