То, что я пытаюсь сделать, это добавить ошибку для поля в представлении, ПОСЛЕ и form.is_valid()
и form.save()
, и, похоже, это работает, но только из-за взлома, и я надеюсь, что кто-тоЗдесь можно объяснить, почему это работает.
Так что в функции save()
моей формы я подключаюсь к серверу LDAP и пытаюсь аутентифицировать пользователя и пароль, предоставленные в форме.Если все это работает, то в итоге получается объект User
и создается объект Profile
.Однако в коде для подключения и получения данных из LDAP существует вероятность возникновения ошибки, например, неправильных учетных данных или просто невозможно привязать к серверу.В таком случае я возвращаю None
, и мое представление обрабатывает его, добавляя в форму ошибку.Вот соответствующий код в представлении:
if form.is_valid():
profile = form.save()
if profile is None:
# there was an LDAP error
msg = u"An error ocurred trying to authenticate over LDAP. Try again."
form = form_class(request.POST)
print form
form._errors['user_name'] = ErrorList([msg])
return render_to_response(template_name, locals())
Теперь, когда этот оператор печати закомментирован, я получаю 'NoneType' object does not support item assignment
, когда пытаюсь добавить ошибку в форму.Если я раскомментирую оператор print, он будет работать так, как я ожидал.Есть идеи, почему?И в любом случае я могу сделать это, не имея там этого оператора печати?Спасибо!
PS: я не хотел делать проверку формы в чистом методе, так как я не хочу привязываться к серверу LDAP и пытаться аутентифицировать пользователя дважды, я просто хочу, чтобыслучается один раз, и это либо работает, либо нет.