При первом доступе к странице .is_valid возвращает false - PullRequest
0 голосов
/ 19 января 2020

При первом обращении к странице индекса .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,
    )

Ответы [ 2 ]

2 голосов
/ 19 января 2020
# 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 голосов
/ 19 января 2020

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