簡體   English   中英

為什么Django form.is_valid()總是為false

[英]why Django form.is_valid() always false

我正在寫一個登錄代碼。 但是form.is_valid()總是false我不知道為什么?

模型

class User(models.Model):
    Man = 'M'
    Woman = 'W'
    GENDER_CHOICES=(
        (Man, 'M'),
        (Woman, 'W'),
    )
    user_no = models.AutoField(primary_key=True)
    user_email = models.EmailField(max_length=254)
    user_pw = models.CharField(max_length=50)
    user_gender = models.CharField(
        max_length=1,
        choices=GENDER_CHOICES,
        default=Man,
    )
    user_birthday = models.DateField(blank=True)
    user_jdate = models.DateTimeField(auto_now_add=True)

signin.html

<form method="post" action="{% url 'signin' %}">
{% csrf_token %}
<h3>ID : {{form.user_email}} </h3>
<h3>PASSWORD : {{form.user_pw}} </h3>


<input type="submit" class="btn_submit" value="로그인" />

views.py

def signin(request):
if request.method == 'POST':
    form = Form(request.POST)
    if form.is_valid():
        print("success")
    else:
        print("false")
else:
    form = Form()
return render(request,'signin.html',{'form':form})

1)怎么了?

2)其他簽約為true,因為signup_bails為true,但為什么簽約始終為false?

3)如何解決?

我建議一些事情。 首先,您需要首先定義表單對象。 如果您這樣做了,並且正在導入此表單,請在此處提交以進行審核。

如果您對創建自己的用戶模型感興趣,為什么不擴展Django的用戶模型。 它已經具有所有功能,如登錄,組和權限。 也許您想要Django用戶模型之外的其他屬性。 您可以在擴展模型中添加此屬性。

app / models.py

from django.contrib.auth.models import AbstractBaseUser, PermissionsMixin, UserManager, AbstractUser


class User(AbstractUser):

    def __init__(self, *args, **kwargs):
        super(User, self).__init__(*args, **kwargs)
        is_active = models.BooleanField(default=True)
        is_admin = models.BooleanField(default=False)
        is_staff = models.BooleanField(default=False)

    def get_short_name(self):
        return self.username

    def __str__(self):
        if self.first_name and self.last_name:
            name = self.first_name + " " + self.last_name
        else:
            name = self.username
        return name

    def __unicode__(self):
        return self.email

在此示例中,您可以看到我已經將自定義的“用戶”模型從django.contrib.auth.models擴展到AbstractUser,這意味着我可以使用Django用戶模型的所有屬性,但還添加了另外三個字段(is_active,is_admin, is_staff)。

不要忘記將這個新的擴展模型注冊到settings.py

settings.py

 AUTH_USER_MODEL = 'app.User'

現在,假設您要從用戶模型更新用戶實例。 讓我們使用一個基於此User模型的Form。

app / forms.py

from django import forms 
from .models import User


class UpdateUserForm(forms.ModelForm):

    class Meta():
        model = User

現在讓我們在您的views.py中使用此表單

app / views.py

from .models import User
from .forms import UpdateUserForm
from django.shortcuts import get_object_or_404


def update_user(request, id):
    _user = get_object_or_404(User, id=id)
    form = UpdateUserForm(instance=_user)
    template = 'app/template.html'
    if request.method == 'POST':
       form = UpdateUserForm(request.POST, instance=_user)
       if form.is_valid():
           form.save()
    context = {
        'form':form
    }
    return render(request, template, context)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM