【问题标题】:IntegrityError a NOT NULL constraint failed : Submit a form through djangoIntegrityError a NOT NULL 约束失败:通过 django 提交表单
【发布时间】:2021-09-04 16:28:12
【问题描述】:

我想用现有的HTML FORM 创建一个POST REQUEST,将其存储在数据库中,但每次我尝试通过表单提交数据时,都会出现以下错误

顺便说一句,我在这些帖子之后这样做:

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

]

【问题讨论】:

  • 您确定表格上的所有字段都填写了吗?输入元素中的required 属性可能有助于避免此错误。

标签: python django


【解决方案1】:

我建议两件事。 1. 要么将模型字段设置为可空,即使它没有为其中一个字段获取值,它仍将被保存。例如:

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. 使用必需的属性required 设置您的html 输入和文本区域字段。该值将传递给所有字段。

【讨论】:

    【解决方案2】:

    就是这一行:

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

    改成:

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

    【讨论】:

      猜你喜欢
      • 2020-12-19
      • 2016-04-02
      • 1970-01-01
      • 2023-03-20
      • 2023-03-29
      • 2020-06-28
      • 2019-02-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多