Я изо всех сил пытаюсь передать некоторые дополнительные данные из моего класса Form в свои представления. Для восстановления пароля пользователь должен указать имя пользователя или адрес электронной почты. При чистке, имя пользователя и пароль проверяются, если один из них существует в базе данных:Передача данных в форму FormView Форма через kwargs
def clean(self):
username = self.cleaned_data.get("username")
email = self.cleaned_data.get("email")
if username:
try:
user = User.objects.get(username__iexact=username, is_active=True) # <- to view
except User.DoesNotExist:
raise forms.ValidationError(
self.error_messages["invalid_username"],
code="invalid_username"
)
elif email:
try:
user = User.objects.get(email__iexact=email, is_active=True) # <- to view
except User.DoesNotExist:
raise forms.ValidationError(
self.error_messages["invalid_email"],
code="invalid_email"
)
else:
raise forms.ValidationError(
self.error_messages["empty_form"],
code="empty_form"
)
return self.cleaned_data
Когда форма была утверждена, я хочу, чтобы отправить данные пользователя в представлении. Это позволяет отделить логику send_email от формы и возможность добавить некоторую информацию в контекст, чтобы ее можно было отобразить в шаблоне.
Так что в моем FormView, если форма действительна, я хочу иметь возможность использовать объект пользователя, полученный в форме.
В настоящее время я попытался найти несколько «ответов» на другие вопросы и примеры из Интернета. Но я продолжаю получать атрибуты AttributeErrors, KeyErrors, WSGIRequest, которые не поддерживают назначение элемента.
Последняя попытка я сделал было перезаписать инициализации в моей форме, и get_form_kwargs на мой взгляд:
Форма
def __init__(self, *args, **kwargs):
self.request = kwargs.pop('request')
super(RecoverPasswordForm, self).__init__(*args, **kwargs)
def clean(self):
....
self.request["user"] = User.objects.get(username__iexact=username, is_active=True)
Посмотреть
def get_form_kwargs(self, **kwargs):
kwargs = super(RecoverPassword, self).get_form_kwargs()
kwargs["request"] = self.request
return kwargs
что приводит к следующая погрешность
объект «WSGIRequest» не поддерживает назначение элемента
Может кто-нибудь дать мне объяснение того, что я делаю неправильно, и толкать меня в правильном направлении, чтобы решить эту проблему? Заранее спасибо!
Это будет работать на самом деле, но это означало бы, что я должен выполнить два запроса. Один в форме и один в представлении, которые оба идентичны. Запрос формы требуется для проверки наличия имени пользователя или электронной почты. Если нет, то выполняется проверка validation_error. Я хочу использовать результат запроса в форме в моем form_valid в моем представлении. – Nrzonline
@Nrzonline Я отредактировал свой ответ –
Я попытался что-то вроде этого раньше, но это привело к непреложной ошибке. Не уверен, что я сделал неправильно тогда ...Во всяком случае, это работает отлично. Именно то, что я искал, большое спасибо за вашу помощь! – Nrzonline