Django is_valid () всегда возвращает ложную ошибку - PullRequest
1 голос
/ 17 января 2020

Я новичок Django. Когда я отправляю на страницу html, функция is_valid в моем views.py всегда возвращает false. пользователи. html это мой шаблон. Я явно заполнил все правильно, но он все равно возвращает ложь. Любая помощь приветствуется.

это мой файл models.py

    from django.db import models

# Create your models here.
class User(models.Model):
    first_name = models.CharField(max_length=264, )
    last_name = models.CharField(max_length=264, )
    email = models.EmailField(max_length=255,)
    def __str__(self):
        return self.first_name + self.last_name

это мой файл forms.py

    from django import forms
from first_app.models import User
from django.forms import ModelForm


class User_form(ModelForm):

    class Meta:
        model = User
        fields = ['first_name','last_name','email']

это мой файл views.py

 from django.shortcuts import render
from django.http import HttpResponse
from . import forms
from first_app.models import User
# Create your views here.

def index(request):
    return render(request,'index.html')



def user_form_view(request):

    form = forms.User_form()

    if request.method == 'POST':

        if form.is_valid():
            form = forms.User_form(request.post)
            form.save()
            return index(request)

        else:
            print(form)
            return user_show(request)

    return render(request,'first_app/users.html',{'form':form})

а это мои пользователи. html

  <!DOCTYPE html>
{% load static %}

<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title>Users</title>
  </head>
  <body>

    <h1>Hello! please type in your information</h1>
    <div class="container">

      <form class="" method="POST">
        {{form.as_p}}
        {% csrf_token %}
        <input type="submit" class="btn btn-primary" value="submit">
      </form>
    </div>
  </body>
</html>

1 Ответ

1 голос
/ 17 января 2020

Чтобы форма была действительной, она должна быть "ограниченной" (вы можете проверить это с помощью .is_bounded [Django -doc] ). Ограниченный означает, что вы передали ему данные, например, с помощью request.POST (или request.GET, или другого словарного контейнера):

def user_form_view(request):
    if request.method == 'POST':
        <b>form = forms.User_form(request.POST)</b>
        if form.is_valid():
            form.save()
            return index(request)
        else:
            print(form)
            return user_show(request)
    else:
        form = forms.User_form()
    return render(request,'first_app/users.html',{'form':form})

Примечание : имена классов обычно пишутся в PerlCase , а не snake_case , поэтому вам, вероятно, следует переименовать User_form в UserForm.

...