Conjuntos de formularios de Django

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 geeksforgeeksque 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.pyIngrese 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_viewcomo 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/ .
django-formsets.
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 extraatributo 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 extrahace múltiples copias del mismo formulario. Si uno quiere crear 5 formularios ingrese extra = 5y de igual forma para los demás. Visite http://localhost:8000/ para verificar si se crean 5 formularios.
django-formsets-multiple-forms

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/
enter-formset-data-django-formsets
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.
django-formsets-use-data1
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

Deja una respuesta

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