Trabajando con formularios en Django, crear un registro

En HTML, un formulario es una colección de elementos dentro de <form>...</form> que permiten a un usuario ingresar texto, seleccionar opciones, entre cualquier otra operación; etc., y luego devolver esa información. al servidor, en este caso, a Django.

Algunos de estos elementos de interfaz de formulario (entrada de texto o casillas de verificación) están incrustados en el propio HTML. Otros son mucho más complejos; Una interfaz que muestra un selector de fechas o le permite mover un control deslizante o manipular controles generalmente usará JavaScript y CSS, así como también elementos de formulario HTML <input> para lograr estos efectos.

Vamos a crear el proceso para emplear el formulario para crear registros empleando el Form en Django que definimos anteriormente; para eso vamos a emplear una función de creación que vamos a emplear tanto para mostrar el formulario como para crear los registros.

def create(request):
   form = ProductForm()
   return render(request, 'create.html', { 'form' : form })

Como puedes ver, creamos una instancia de nuestro formulario, la clase y luego pasamos esta instancia a un template que tiene la siguiente definición:

<form method="post">
   {% csrf_token %}
   {{ form }}
   <button type="submit">Enviar</button>
</form>

Como puedes ver, imprimimos el form que encapsulamos dentro de un form HTML y lo definimos de tipo Post, ya que las peticiones de tipo POST son las que generalmente empleamos para crear o actualizar registros.

Formularios de tipo get y post

Ahora, queremos emplear este formulario para crear nuestros registros, para eso debemos detectar cuando pintamos el formulario (get) o cuando procesamos los datos (post), para eso detectamos el tipo de método, si es de tipo Post (request.method == "POST"), en este caso, además de, preguntar si el formulario es válido (si las validaciones realizadas fueron superadas), luego, generamos una instancia de product, que es un modelo y establecemos sus datos:

product = Product()
product.title = form.cleaned_data['title']
product.price = form.cleaned_data['price']
product.description = form.cleaned_data['description']
product.category = form.cleaned_data['category']

Y luego guardamos:

product.save()

cleaned_data nos permite trabajar con los datos saneados.

Código completo de la aplicación

def create(request):
    form = ProductForm()
    if request.method == "POST":
        #print(request.POST['title'])
        form = ProductForm(request.POST)
        if form.is_valid():
            print("Valido")
            #form.save()
            product = Product()
            product.title = form.cleaned_data['title']
            product.price = form.cleaned_data['price']
            product.description = form.cleaned_data['description']
            product.category = form.cleaned_data['category']
            product.save()
        else:
            print("Invalido")
    return render(request, 'create.html', { 'form' : form })
    
<form method="post">
    {% csrf_token %}
    {{ form }}
    <button type="submit">Enviar</button>
</form>

Conclusiones

Como puedes darte cuenta, emplear el formulario que creamos en la entrada anterior, resulta sencillo para hacer este tipo de operaciones, en la función de creación cumple dos únicos pasos, pintar el formulario y obtener los datos para registrarlos en el modelo para luego guardarlos.

- Andrés Cruz

In english
Andrés Cruz

Desarrollo con Laravel, Django, Flask, CodeIgniter, HTML5, CSS3, MySQL, JavaScript, Vue, Android, iOS, Flutter

Andrés Cruz En Udemy

Acepto recibir anuncios de interes sobre este Blog.