python - Django:is_valid() 方法总是假的,为什么?
问题描述
每次我在不使用 is_valid() 函数的情况下从表单获取 stu_name 变量值时,stu_name 始终是用户输入的返回值,但使用 is_valid() stu_name 始终为 None。我做了一些实验,我发现 is_valid() 始终返回 false 但是为什么?
这是views.py 文件代码。
from django.shortcuts import render
from django.http import HttpResponse
from .models import student
from .forms import student_data
def my_data(request):
stu_name=None
myform=student_data(request.POST)
if (request.method=="POST" and myform.is_valid()):
stu_name=myform.cleaned_data['user']
else:
myform=student_data
return render(request,'show.html',{'student':stu_name})
这是我编写表单代码的 html 文件。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div>
<form action="/payment/show/" method="POST">
{% csrf_token %}
<label for="">Name</label>
<input type="text" name="user" required>
<label for="">ID</label>
<input type="number" required>
<label for="">Address</label>
<input type="text" required>
<button type="submit">Add Me</button>
</form>
</div>
</body>
</html>
forms.py 文件代码。
from django import forms
class student_data(forms.Form):
name=forms.CharField(widget=forms.TextInput,max_length=20)
id=forms.IntegerField(widget=forms.NumberInput,max_value=6)
address=forms.CharField(widget=forms.TextInput,max_length=50)
解决方案
修改您的视图
def my_data(request):
stu_name=None
myform=student_data(request.POST)
if (request.method=="POST" and myform.is_valid()):
stu_name=myform.cleaned_data['user']
else:
myform=student_data
return render(request,'show.html',{'student':stu_name,'form':myform})
在你的 html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div>
<form action="/payment/show/" method="POST">
{% csrf_token %}
{{ form.as_p}}
<button type="submit">Add Me</button>
</form>
</div>
</body>
</html>
在你的 forms.py
class student_data(forms.Form):
name=forms.CharField(widget=forms.TextInput,max_length=20, required=True)
id=forms.IntegerField(widget=forms.NumberInput,max_value=6, required=True)
address=forms.CharField(widget=forms.TextInput,max_length=50, required=True)
推荐阅读
- database - 如何在具有持久数据的多个节点上的 Docker swarm 中创建 Percona XtraDB 集群
- opengl - 在片段着色器中,为什么我不能使用平面输入整数来索引 sampler2D 的统一数组?
- java - 如何处理 ZipException(文件密码错误:Demo.zip)并显示适当的消息
- c++ - C++ 如何为类的所有成员调用方法?
- javascript - 无法读取angularjs中未定义的属性'min'
- html - 如何在背景图像后面放置一个
- c# - 在 LINQ json 结果中对多个表进行分组
- visual-studio - 两种不同的编码标准
- python - 替代 aws 客户端 cognito list_users() 函数的分页
- python - DataFrame中列表中的数字总和