首页 > 解决方案 > 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)

标签: pythondjangopython-3.xforms

解决方案


修改您的视图

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)

推荐阅读