当我第一次访问该页面时,.is_valid返回false

问题描述 投票:0回答:2

当我第一次访问索引页时,.is_valid返回false。如何使它不显示错误消息?初次访问页面时为什么显示False?有什么方法可以避免错误消息?

urls.py在下面


from django.urls import path
from . import views

urlpatterns = (
    path('', views.index, name='index'),
)

views.py在下面



from django.shortcuts import render
from . import forms


def index(request):
    form = forms.Page1(request.GET or None)
    if form.is_valid():
        message = 'True'
    else:
        message = 'False'
    content = {
        'title': 'Webapp',
        'form': form,
        'message': message,
    }
    return render(request, 'forms.html', content)

forms.py在下面


from django import forms

EMPTY_CHOICES = (
    ('', '-'*10),
)

GENDER_CHOICES = (
    ('man', '男'),
    ('woman', '女')
)


class Page1(forms.Form):
    user_sir_name = forms.CharField(
        label='姓:',
        max_length=20,
        required=True,
        widget=forms.TextInput(),
    )
    user_given_name = forms.CharField(
        label='名:',
        max_length=20,
        required=True,
        widget=forms.TextInput(),
    )
    user_sex = forms.ChoiceField(
        label='性別:',
        widget=forms.Select,
        choices=EMPTY_CHOICES + GENDER_CHOICES,
        required=True,
    )
python django
2个回答
2
投票
# You will get False for the first time as you request the url, you are submitting nothing from your form and your fields are required to pass the input.

# So, change your views.py method and make your request to post


def index(request):
    form = forms.Page1(request.POST or None)
    if form.is_valid():
        message = 'True'
    else:
        message = 'False'
    content = {
        'title': 'Webapp',
        'form': form,
        'message': message,
    }
    return render(request, 'forms.html', content)


and in your forms.html, change your form tag method to post


<form method="POST">
...
...
</form>

0
投票

您可以在实例化表单后使用print(form.errors)来检查表单错误。这将在命令提示符下打印html错误消息。您甚至可以将此消息传递到模板以进行渲染。

def index(request):
    if request.method=="POST":
      form = forms.Page1(request.POST)
      if form.is_valid():
          message = 'True'
      else:
          print(form.errors)
    else:
         print("you didn't post anything to form")
          message = 'False'
      content = {
       'title': 'Webapp',
       form': form,
       'message': message,
    }
    return render(request, 'forms.html', content)
© www.soinside.com 2019 - 2024. All rights reserved.