首页 > 解决方案 > 如何在不使用表单的情况下通过 django 中的 html 模板将数据发布到数据库中

问题描述

我想通过 html 模板将数据发布到数据库中,并将渲染模板成功插入到您的数据库中。但显示错误

TypeError at /empdetails
'QueryDict' object is not callable

这是我的代码 models.py

class Employee(models.Model):
    eno=models.IntegerField(null=True)
    ename=models.CharField(max_length=20)
    eadd=models.CharField(max_length=20)

和views.py

def Empdetails(request):
   num=request.POST('eno')
   nam=request.POST('ename')
   add=request.POST('eadd')
   details=Employee(eno=num,ename=nam,eadd=add)
   details.save()
   return render(request,'emp.html')

和模板emp.html

<!DOCTYPE html>
{% load static %}
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="/templates/inserted.html" method="post">
<label for="eno">Eid :</label>
<input type="text" name=" " value="" placeholder="eid" id="eno">
<label for="nam">Ename</label>
<input type="text" name=" " value="" placeholder="name" id="nam">
<label for="add">Eadd</label>
<input type="text" name=" " value="" placeholder="add" id="add">
<input type="submit" value="submit">

</form>

</body>
</html>

标签: pythondjangodjango-modelsdjango-templatesdjango-views

解决方案


尝试打印/记录您的request.POST对象的内容 - 您是否以您认为发送它们的名称发送数据?您的表单具有名称为ex.reddy,nameadd- 但您的视图正在寻找名称为eno,ename和的 POST 变量eadd

的默认行为.get是在对象中不存在提供的密钥时返回None,因此如果您实际上没有发送eno密钥,那么request.POST.get('eno')将是None.

也就是说,IntegrityError当您尝试将空值保存到带有null=True. 您可能有任何未应用的迁移吗?

编辑:解决您的编辑问题,querydict is not callable意味着您正在尝试像函数一样使用字典。request.POST('thing')不能工作 - 它应该是request.POST['thing']你以前的 .get 语法。

编辑:解决您的其他编辑,您的 HTML 表单字段的名称现在都是空白的。name您应该使用要在其下发送字段值的 s 来命名这些表单字段。


推荐阅读