【问题标题】:Django form.is_valid always returning trueDjango form.is_valid 总是返回 true
【发布时间】:2011-08-18 01:42:33
【问题描述】:

我是 Django 和 python 的新手,正在尝试从一本书中学习。在下面的代码中,我试图确保 password1 和 password2 相同,但它似乎没有运行 clean_password2 验证,因为即使它们具有不同的值,它也总是返回 true。

import re
from django.contrib.auth.models import User
from django import forms

class RegistrationForm(forms.Form):
    username = forms.CharField(label=u'Username', max_length=30)
    email = forms.EmailField(label=u'Email')
    password1 = forms.CharField(
        label= u'Password',
        widget = forms.PasswordInput()
    )
    password2 = forms.CharField(
        label= u'Password (Again)',
        widget = forms.PasswordInput()
    )

    def clean_password2(self):
        password1 = self.cleaned_data.get('password1')
        password2 = self.cleaned_data.get('password2')

        if password1 != password2:
            raise forms.ValidationError('Passwords do not match.')
        return password2

【问题讨论】:

标签: python django validation


【解决方案1】:

如果您正在清理两个相互依赖的字段,您应该覆盖表单的clean() 方法。你可以阅读更多here

【讨论】:

    【解决方案2】:

    任何需要访问多个字段的验证器都应该是clean() 方法的一部分,而不是clean_<filedname>() 方法的一部分。看看 django-registration 是如何做你想要的:https://bitbucket.org/ubernostrum/django-registration/src/58eef8330b0f/registration/forms.py#cl-57

    【讨论】:

    • 谢谢伙计。该示例代码确实很有帮助,因为我的代码格式也没有正确缩进,甚至无法识别该函数。我是 Python 的真正菜鸟。
    • 我什至不认为这可能是一个问题(当我编辑你的问题代码格式时)。空格在 Python 中很重要,请务必记住这一点,它表示您的块级别。
    【解决方案3】:

    您确定检查的是form.is_valid() 而不是form.is_valid?它是一个方法,而不是一个属性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-06
      • 1970-01-01
      • 2014-12-27
      • 2018-01-05
      • 1970-01-01
      • 2018-12-17
      相关资源
      最近更新 更多