如何访问Django表单字段进行验证

时间:2020-08-18 09:22:16

标签: python django forms

我想在我的Django表单上创建验证方法。这样,我可以轻松地通过Form实例进行验证

class SignupForm(forms.Form):
username = forms.CharField(label='username', max_length=255)
password1 = forms.CharField(label='password', max_length=255, widget=forms.PasswordInput())
password2 = forms.CharField(label='retype password', max_length=255, widget=forms.PasswordInput())

def validate_password(self):
    if self.password1 == self.password2:
        return True
    else:
        return False

def save(self):
    Account.objects.create(
        username=self.username,
        password=self.password1
    )
    print('${self.username} has been added!')

这样我就可以在视图上使用表单了

post = request.POST
form = SignupForm()

if Account.objects.filter(username=post['username']).count() > 0:
    messages.warning(request, "account with the same username is already exists!")
    print("account saved")
else:
    if form.validate_password():
        form.save()
        messages.success(request, "Account has been added")
    else:
        messages.warning(request, "passwords don't match! {} {}".format(post["password1"], post["password2"]))

return redirect("signup")

我在CLI中遇到这样的错误

AttributeError: 'SignupForm' object has no attribute 'password1' [18/Aug/2020 16:10:10] "POST /accounts/signup HTTP/1.1" 500 74586

我认为它是指if self.password1 == self.password2:

我对Django响应的错误 django error site

但是似乎我收到一个错误,即表单没有创建模型时分配的属性。有没有办法可以在form方法中访问对象实例的属性?这是我的第一个python项目,所以我还没有掌握该语言。

操作系统:Windows 10 的Django:3.1 python:3.7.4

1 个答案:

答案 0 :(得分:0)

我已经解决了。我犯了一个错误,没有在行form = SignupForm()中填充SignupForm()表单。所以我要做的就是在我的视图中通过form = SignupForm(post)对其进行分配。

而且我可以通过调用表单实例方法中的self.data['username']而不是self.username来访问form属性。

答案是使用self.data访问表单的实例字段,而不是直接将其称为Django的字段