Thrillidas
Thrillidas

Reputation: 79

Use an existing HTML Template Form and submit data through Django

I'd like to make a POST REQUEST with an existing HTML FORM, to store it in a database, but everytime I tried to submit data through the form, it doesn't do nothing. it doesn't add data to the database. What should I do?

By the way I'm doing this following those post:

Django form using HTML template

MultiValueDictKeyError generated in Django after POST request on login page

Registro.html

{% extends "RegistrarProyecto/layout.html" %}


{% block title %} {% endblock %}

{% block content %}

<h1>Crear Usuario</h1> 

<form class="CrearUsuario" action="{% url 'registro' %}" method="POST">

    {% csrf_token %}
    <input type="text",name="NombreProyecto", placeholder="Nombre del Proyecto" >
    <br> 
    <br> 
    <input type ="text", name="ResponsableProyecto", placeholder ="Responsable del proyecto">
    <br> 
    <br> 
    <textarea name="DescripcionProyecto", rows="4", cols="50"></textarea>
    <br> 
    <br>
    <input type="submit" value="Registrar">
    </form>
<br>
<a href="{% url 'index' %}">Ir a Bienvenido</a>

{% endblock %}

views.py

def registro(request):
    if request.method == 'POST':
        NombreProyecto = request.POST.get('NombreProyecto')
        ResponsableProyecto = request.POST.get('ResponsableProyecto')
        DescripcionProyecto = request.POST.get('DescripcionProyecto')
        return render(request, 'RegistrarProyecto/Registro.html')
    else:
        return render(request, 'RegistrarProyecto/Registro.html')

models.py

from django.db import models

# Create your models here.

class Proyecto(models.Model):
    NombreProyecto = models.CharField(max_length = 64)
    ResponsableProyecto = models.CharField(max_length= 64)
    DescripcionProyecto = models.CharField(max_length = 64)

    def __str__(self):
        return f"{self.NombreProyecto}"
    
class Evaluador(models.Model):
    NombreEvaluador = models.CharField(max_length=64)
    Proyecto = models.ManyToManyField(Proyecto, blank=True, related_name="Evaluador")

    def __str__(self):
        return f"{self.NombreEvaluador} {self.Proyecto}" 

urls.py

from django.urls import path
from . import views

urlpatterns = [
    path("", views.index, name="index"),
    path("Registro", views.registro, name="registro")

]

UPDATE N°1

enter image description here

After applying the changes I recibe the following error

Upvotes: 1

Views: 477

Answers (1)

taha maatof
taha maatof

Reputation: 2165

def registro(request):
  if request.method == 'POST':

      NombreProyecto = request.POST.get('NombreProyecto')
      ResponsableProyecto = request.POST.get('ResponsableProyecto')
      DescripcionProyecto = request.POST.get('DescripcionProyecto')

      Proyecto.objects.create(NombreProyecto=NombreProyecto,ResponsableProyecto=ResponsableProyecto,DescripcionProyecto=DescripcionProyecto)
      return redirect("to_some_url_name") 
        

  return render(request, 'RegistrarProyecto/Registro.html')

Update

replace this line

<input type="text",name="NombreProyecto", placeholder="Nombre del Proyecto" >

with this:

<input type="text", name="NombreProyecto", placeholder="Nombre del Proyecto">

apperantly the space between name and comma, caused it to return None

Upvotes: 1

Related Questions