Django: метод is_valid () всегда ложный, почему? - PullRequest
0 голосов
/ 25 марта 2020

Каждый раз, когда я получаю значение переменной stu_name из формы без использования функции is_valid (), тогда 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)

1 Ответ

0 голосов
/ 25 марта 2020

Измените ваше представление

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...