Задача проверки Django-форм при инициализации - PullRequest
0 голосов
/ 19 июня 2011

У меня проблема с проверкой полей формы в Django.

У меня есть форма profile_edit, в которой есть набор функций clean. Кроме того, для управления текущим паролем мне нужно передать пароль текущего пользователя в форму.

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()
    self.fields["birthYear"].choices = birthYearList

def set_user(self, user):
    self.user = user

def clean_email(self):
    field_data = self.cleaned_data['email']

    if not field_data:
        return ''

    try:
        u = User.objects.get(email=field_data)
        if not u.id == self.user.id:
            raise forms.ValidationError(_('err_already_registered'))
    except ObjectDoesNotExist:
        pass

    return field_data

Используя метод set_user, я могу передать текущего пользователя в форму, однако, когда я пишу

form = MemberSettings(default_data)
form.set_user(u)

на мой взгляд, форма пытается проверить все поля, хотя я просто пытаюсь инициализировать форму. Но если я не установлю пользователя, форма работает нормально.

В чем проблема, которую я не могу заметить?

Спасибо

1 Ответ

1 голос
/ 19 июня 2011

См. Мой ответ: Проблема редактирования формы Django при инициализации

Это та же проблема.Вам нужно использовать начальный аргумент при передаче данных в форму.

...