我正在尝试创建一个自定义表单字段并对其进行验证。这是 Django 1.0 版本。
这是我的表单对象
class UsernameField(forms.CharField):
def clean(self, values):
print ""
我是这样称呼它的
class RegisterForm(forms.Form):
username = UsernameField(max_length=30, min_length=4)
password = forms.CharField(widget = forms.PasswordInput(), min_length=5)
password2 = forms.CharField(widget = forms.PasswordInput(), min_length=5)
email = forms.EmailField(max_length=75)
现在我想保留 CharField 的默认最小/最大长度检查。但我似乎不知道如何做到这一点。
如果我将任何代码放入 clean() 中,则不会检查这些代码。如果我尝试调用parent.clean(),我会收到错误。
如果您只想清理字段,则无需定义全新字段,可以在表单的 clean_username 方法中执行此操作
class RegisterForm(forms.Form):
username = forms.CharField(max_length=30, min_length=4)
...
...
def clean_username(self):
username = self.cleaned_data['username']
try:
user = User.objects.get(username=username)
except User.DoesNotExist:
return username
raise forms.ValidationError(u'%s already exists' % username )
def clean(self):
# Here you'd perform the password check
...
您也可以考虑使用Django 注册 http://bitbucket.org/ubernostrum/django-registration/wiki/Home对于 Django 中的用户注册,它会在可插入应用程序中处理此问题,该应用程序将为您处理所有用户验证、创建和设置。
至于新字段的创建,字段的 clean() 方法应该返回一个清理后的值,而不仅仅是打印它。
class MyField(forms.CharField):
def clean(self, value):
# perform cleaning
return value
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)