我为我的Django表单写了一个干净的函数。我将上面的OPTIONAL_PASSWORD_INPUT
和OPTIONAL_REPEAT_PASSWORD_INPUT
定义为密码输入字段:
class addNewMemberForm(SignUpForm):
username = forms.SlugField(required=False,
min_length=MIN_USER_NAME,
max_length=MAX_USER_NAME,
label="Username (optional)",
help_text="If left empty, we will generate a username for you."
)
password = OPTIONAL_PASSWORD_INPUT
password2 = OPTIONAL_REPEAT_PASSWORD_INPUT
def clean(self):
# if user name is filled out, so must be the password field.
if self.data["username"] and not self.data["password"]:
raise forms.ValidationError("If you specify a username, you must specify a password.")
return self.cleaned_data
def __init__(self, *args, **kwargs):
super(SignUpForm, self).__init__(*args, **kwargs)
self.fields.keyOrder = uniqueify(['username', 'email'] + self.fields.keyOrder)
如果我将if self.data["username"] and not self.data["password"]:
更改为if self.cleaned_data["username"] and not self.cleaned_data["password"]:
,Django会为“用户名”生成关键错误。
为什么我可以访问self.data
数组的值,而不是我的clean函数中self.cleaned_data
数组的值?
另一方面,这个问题是否重要?我可以使用self.data
吗?
答案 0 :(得分:0)
在调用form.clean
之前完成单个字段验证和清理。仅当输入的数据有效时,才会将username
添加到cleaning_data。这意味着您应该使用self.cleaned_data.get
或者检查self.errors
早期是否有任何错误,只需保留额外的验证,如果单个字段无效,则可能不需要保释。