'RegisterForm' 对象没有属性 'is_valid'

时间:2021-05-21 19:03:21

标签: python django

这是models.py

from django.db import models
        
class RegisterForm(models.Model):
    fname = models.CharField(max_length=100)
    lname = models.CharField(max_length=100)
    pno = models.CharField(max_length=100)
    email = models.EmailField(max_length=200)
    pass1 = models.CharField(max_length=100)
    pass2 = models.CharField(max_length=100)

这是我的 Views.py

from django.shortcuts import render
from .models import RegisterForm
# Create your views here.
def registerView(request):
    if request.method=='POST':
        fm = RegisterForm(request.POST)
        if fm.is_valid():
            fname = fm.cleaned_data['fname']
            lname = fm.cleaned_data['lanme']
            pno = fm.cleaned_data['pno']
            email = fm.cleaned_data['email']
            pass1 = fm.cleaned_data['pass1']
            pass2 = fm.cleaned_data['pass2']
            reg = RegisterForm.save(fname = fname,lname=lname,pno=pno,email=email,pass1=pass1,pass2=pass2)
            reg.save()
            fm = RegisterForm()
    else:
        fm = RegisterForm()
    return render(request, 'register.html', {})
        

请求方式:POST

请求网址:http://127.0.0.1:8000/

Django 版本:3.2

异常类型:属性错误

异常值:'RegisterForm' 对象没有属性 'is_valid'

异常位置:H:\Django\authetication\users\views.py, line 7, in registerView

1 个答案:

答案 0 :(得分:1)

你的 RegisterForm 是一个 model,而不是一个 model form,因此 RegisterForm(request.POST) 没有意义,你的 RegisterForm 有没有 .is_valid(…) 方法。 模型处理在数据库中存储数据,而表单接收验证 em> 并清理数据。

看起来你想定义一个profile,所以你可以实现一个Profile模型:

# app_name/models.py

from django.db import models
     
class Profile(models.Model):
    fname = models.CharField(max_length=100)
    lname = models.CharField(max_length=100)
    pno = models.CharField(max_length=100)
    email = models.EmailField(max_length=200)
    pass1 = models.CharField(max_length=100)
    pass2 = models.CharField(max_length=100)

然后根据该模型定义一个 ModelForm

# app_name/forms.py

from django import forms

class ProfileForm(forms.ModelForm):
    class Meta:
        model = Profile
        fields = '__all__'

然后在您可以使用的视图中:

from django.shortcuts import render
from .forms import ProfileForm

def registerView(request):
    if request.method == 'POST':
        form = ProfileForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('name-of-some-view')
    else:
        form = ProfileForm()
    return render(request, 'register.html', {'form': form})

然而,您可能应该对您的模型进行修改:只使用一个字段来存储密码,并且密码应该散列以防止数据泄漏您的数据库的案例数据被盗。 Django 已经有一个用户模型,并且文档中有一个名为 Customizing authentication in Django 的部分。这可以帮助您为用户定义模型,并注册该用户。


<块引用>

注意:如果 POST 请求成功,您应该发出 redirect [Django-doc] 实现Post/Redirect/Get pattern [wiki]。 这样可以避免您在用户刷新时发出相同的 POST 请求 浏览器。