通过HTML表单创建用户失败:Django表单提交无数据写入问题
Django表单提交无法创建用户的问题修复
以下是代码中存在的问题及对应修正方案:
1. 请求方法判断错误
request.method的值为大写HTTP方法名,原代码中'post'小写判断永远无法触发POST分支,需改为大写'POST'。
2. 字段拼写错误
视图中request.POST['fisrt_name']存在拼写错误,应改为request.POST['first_name'],与表单name属性保持一致。
3. 模型字段名不匹配
自定义FormRegister模型的字段为firstname、lastname,但视图中错误使用first_name、last_name赋值,导致字段映射失败。
4. 错误调用模型方法
FormRegister是普通自定义模型,并非Django内置User模型,不存在create_user方法,需改用模型自带的create()方法创建对象。
5. 多余的save参数
create()方法已自动完成对象保存,无需再调用save(),且普通模型的save方法没有commit参数。
6. 模型循环导入问题
models.py中导入自身模型from .models import FormRegister会引发循环导入错误,需删除该行。
修正后的views.py
from django.shortcuts import render, redirect from formRegister.models import FormRegister def register(request): if request.method == 'POST': first_name = request.POST['first_name'] last_name = request.POST['last_name'] username = request.POST['username'] FormRegister.objects.create( firstname=first_name, lastname=last_name, username=username ) return redirect('/') else: return render(request, 'formRegister.html')
修正后的models.py
from distutils.command.upload import upload from django.db import models class FormRegister(models.Model): firstname = models.CharField(max_length=100) lastname = models.CharField(max_length=100) username = models.CharField(max_length=100)
优化后的formRegister.html(可选,使用URL反向解析避免硬编码)
<form action="{% url 'register' %}" method="post"> {% csrf_token %} <input type="text" name="first_name" placeholder="First_Name"> <br> <input type="text" name="last_name" placeholder="Last_Name"> <br> <input type="text" name="username" placeholder="Username"> <br> <input type="Submit" value="Submit"> <br> </form> <script src="" async defer></script> </body>
内容的提问来源于stack exchange,提问作者Msmaje
相关产品推荐
相关产品推荐

