Django形成编辑问题在intilization [英] Django form edit problem at intiliazation

查看:190
本文介绍了Django形成编辑问题在intilization的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在Django中预先填写表单时遇到麻烦。因为Aptana中的调试工具不能正常工作,我无法检测到错误。
我想当我尝试 form = MemberSettings(default_data)表单尝试验证数据,它给无效字段的错误,即使在第一次加载。



你能帮我找出问题吗?



谢谢



forms.py

  class MemberSettings(forms.Form):
email = form.EmailField(label = _(member_Email),required = True)
currentPassword = forms.CharField(label = _(member_currentPassword),widget = forms.PasswordInput,required = False)
newPassword = forms.CharField(label = _(member_newPassword),widget = forms.PasswordInput,required = False)
newPasswordRe = forms.CharField(label = _(member_newPasswordRe),widget = forms.PasswordInput, required = False)
emailPreference = forms.ChoiceField(label = _(member_email_preference),widget = forms.RadioSelect(renderer = HorizRadioRenderer),choices = UserMailPreference.USER_MAIL_PREF,required = True)
gender = forms.ChoiceField(标记= _(MEMB er_gender),widget = forms.RadioSelect(renderer = HorizRadioRenderer),choices = UserGender.USER_GENDER,required = False)
birthYear = forms.ChoiceField(label = _(member_birthyear),required = False)
education = forms.ChoiceField(label = _(member_education),choices = UserEducation.USER_EDU,required = False)

def __init __(self,* args,** kwargs):
super(MemberSettings,self).__ init __(* args,** kwargs)
now = datetime.datetime.now()

birthYearList = []
for i in $($($)$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = birthYearList

def clean_currentPassword(self):
field_data = self.cleaned_data ['currentPassword']

如果len(field_data)< = 0:
return field_data

如果len(field_data.split(''))!= 1:
raise forms.ValidationError(_('member_err_password_empty_char'))

如果n(field_data)> 32:
raise forms.ValidationError(_('member_err_password_maxChar'))

if len(field_data)< 5:
raise forms.ValidationError(_('member_err_password_minChar'))

return field_data

def clean_newPassword(self):
field_data = self。 clean_data ['newPassword']

如果len(field_data)< = 0:
返回field_data

如果len(field_data.split(''))! = 1:
raise forms.ValidationError(_('member_err_password_empty_char'))

如果len(field_data)> 32:
raise forms.ValidationError(_('member_err_password_maxChar'))

if len(field_data)< 5:
raise forms.ValidationError(_('member_err_password_minChar'))

return field_data

views.py

  @login_required 
def settings_edit请求):
u = request.user
如果request.method =='POST':
form = MemberSettings(request.POST)
如果form.is_valid():

return redirect('/ member / settings_edit /')
else:
return render_response(request,'member / settings_edit.html',{'form':form})
else:
default_data = {
'email':u.email,
'gender':u.get_profile()。gender,
'education':u.get_profile ().education,
'birthYear':u.get_profile()。birthyear,
'emailPreference':u.get_profile()。mail_preference,
}
form = MemberSettings default_data)
return render_response(request,'use r / settings_edit.html',{'form':form})


解决方案>

在视图中构建表单实例时,需要使用初始参数:

  form = MemberSettings(initial = default_data)

请参阅 https://docs.djangoproject.com/en/1.3/ref/forms/api/ 获取更多信息。希望能帮助你。


I have a trouble with pre-population of the forms in Django. Because debuggin tool in Aptana doesn't work well, I couldn't detect the error. I think when I try form = MemberSettings(default_data) form tries to validate the data and it gives errors for invalid fields even in first load.

Could you help me to find out the problem ?

Thanks

forms.py

class MemberSettings(forms.Form):
email = forms.EmailField(label=_("member_Email"),required = True)
currentPassword = forms.CharField(label=_("member_currentPassword"),widget=forms.PasswordInput,required=False)
newPassword = forms.CharField(label=_("member_newPassword"),widget=forms.PasswordInput,required=False)
newPasswordRe = forms.CharField(label=_("member_newPasswordRe"),widget=forms.PasswordInput,required=False)
emailPreference = forms.ChoiceField(label=_("member_email_preference"), widget=forms.RadioSelect(renderer=HorizRadioRenderer),choices = UserMailPreference.USER_MAIL_PREF,required = True)
gender = forms.ChoiceField(label=_("member_gender"), widget=forms.RadioSelect(renderer=HorizRadioRenderer),choices = UserGender.USER_GENDER ,required = False)
birthYear = forms.ChoiceField(label=_("member_birthyear"),required = False)
education = forms.ChoiceField(label=_("member_education"),choices = UserEducation.USER_EDU, required = False)

def __init__(self,*args, **kwargs):
    super(MemberSettings,self).__init__(*args, **kwargs)
    now = datetime.datetime.now()

    birthYearList = []
    for i in reversed(range (now.year-80,now.year-13)):
        birthYearList.append((i,str(i)))
    self.fields["birthYear"].choices = birthYearList

def clean_currentPassword(self):
    field_data = self.cleaned_data['currentPassword']

    if len(field_data) <= 0:
        return field_data

    if len(field_data.split(' ')) != 1:
        raise forms.ValidationError(_('member_err_password_empty_char'))

    if len(field_data) > 32:
        raise forms.ValidationError(_('member_err_password_maxChar'))

    if len(field_data) < 5:
        raise forms.ValidationError(_('member_err_password_minChar'))

    return field_data

def clean_newPassword(self):
    field_data = self.cleaned_data['newPassword']

    if len(field_data) <= 0:
        return field_data

    if len(field_data.split(' ')) != 1:
        raise forms.ValidationError(_('member_err_password_empty_char'))

    if len(field_data) > 32:
        raise forms.ValidationError(_('member_err_password_maxChar'))

    if len(field_data) < 5:
        raise forms.ValidationError(_('member_err_password_minChar'))

    return field_data

views.py

@login_required
def settings_edit(request):
u = request.user
if request.method == 'POST':
    form = MemberSettings(request.POST)
    if form.is_valid():

        return redirect('/member/settings_edit/')
    else:
        return render_response(request, 'member/settings_edit.html', {'form': form})
else:
    default_data = {
            'email': u.email,
            'gender': u.get_profile().gender,
            'education': u.get_profile().education,
            'birthYear': u.get_profile().birthyear,
            'emailPreference': u.get_profile().mail_preference,
            }
    form = MemberSettings(default_data)
    return render_response(request, 'user/settings_edit.html', {'form': form})

解决方案

You need to use the initial argument when constructing your form instance in the view:

form = MemberSettings(initial=default_data)

See https://docs.djangoproject.com/en/1.3/ref/forms/api/ for more information. Hope that helps you out.

这篇关于Django形成编辑问题在intilization的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆