【问题标题】:Django: is_valid() method is always false why?Django:is_valid() 方法总是假的,为什么?
【发布时间】:2020-07-06 01:00:10
【问题描述】:

每次我在不使用 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)

【问题讨论】:

  • 您的表单上唯一的命名字段是user,而您的表单期望出现nameidaddress...
  • HTML 上的表单输入名称与表单对象的名称不匹配。你只有 name="user" ,没有 id 或 address 。
  • @JonClements 谢谢现在我的代码正在工作实际上我是 django 的新手,我什至不知道 php,所以我是服务器端编程的菜鸟。再次感谢你。另一个问题为什么我们需要在 form.py 中定义表单。在 forms.py 中定义表单是从 html 文件中创建的表单中收集数据。我对此感到困惑。

标签: python django python-3.x forms


【解决方案1】:

修改你的视图

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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-14
    • 1970-01-01
    相关资源
    最近更新 更多