Thrillidas
Thrillidas

Reputation: 79

IntegrityError a NOT NULL constraint failed : Submit a form 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 gives me the following error

enter image description here

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')

      Proyecto.objects.create(NombreProyecto=NombreProyecto,ResponsableProyecto=ResponsableProyecto,DescripcionProyecto=DescripcionProyecto)
      return redirect("RegistrarProyecto/index.html") 
        

  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")

]

Upvotes: 0

Views: 289

Answers (2)

Damoiskii
Damoiskii

Reputation: 1370

I'd suggest two things. 1. Either you set your model field as null-able that even it doesn't get a value for one of those fields it will still be saved. For example:

class Proyecto(models.Model):
    NombreProyecto = models.CharField(max_length=64, null=True, blank=True)
    ResponsableProyecto = models.CharField(max_length=64, null=True, blank=True)
    DescripcionProyecto = models.CharField(max_length=64, null=True, blank=True)
        
    def __str__(self):
        return f"{self.NombreProyecto}"
  1. Set your html input and textarea fields with the required attribute required. That values are passed for all fields.

Upvotes: 0

taha maatof
taha maatof

Reputation: 2165

it is this line:

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

change it to:

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

Upvotes: 1

Related Questions