gpt4 book ai didi

Django 和自定义表单验证

转载 作者:行者123 更新时间:2023-12-03 14:40:37 25 4
gpt4 key购买 nike

我正在尝试创建一个自定义表单字段并对其进行验证。这是 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 的默认 min/max_length 检查,但我似乎无法弄清楚如何做到这一点。

如果我将任何代码放入 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-registration对于 Django 中的用户注册,它会在一个可插入的应用程序中处理这个问题,该应用程序将为您处理所有用户验证、创建和设置。

至于新的 firld 创建,你的字段的 clean() 方法应该返回一个清理过的值,而不仅仅是打印它。
class MyField(forms.CharField):
def clean(self, value):
# perform cleaning
return value

关于Django 和自定义表单验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/489252/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com