Ich hatte vor kurzem Probleme mit FormView und festgestellt, dass der Weg, dies zu tun war, get_form_kwargs verwenden.Neugierig auf get_form_kwargs in FormView
Hier ist mein Code:
class InternalResetPasswordView(FormView):
template_name = 'reset_password.html'
form_class = forms.InternalPasswordResetForm
# success_message = "Password was reset successfully"
# To get request object
# http://notesondjango.wordpress.com/2012/12/18/modelform-formview-and-the-request-object/
# https://stackoverflow.com/questions/13383381/show-message-after-password-change
# http://pydanny.com/simple-django-email-form-using-cbv.html
# http://bubuzzz.wordpress.com/2012/05/01/class-based-generic-views-in-django-a-simple-sample/
def get_form_kwargs(self):
kwargs = super(InternalResetPasswordView, self).get_form_kwargs()
kwargs['user'] = self.request.user
return kwargs
def get_success_url(self):
return reverse('user-detail', kwargs={'pk': self.request.user.id})
@method_decorator(login_required)
def dispatch(self, *args, **kwargs):
return super(InternalResetPasswordView, self).dispatch(*args, **kwargs)
'''
def get_context_data(self, **kwargs):
context = super(InternalResetPasswordView, self).get_context_data(**kwargs)
context['InternalPasswordResetForm'] = context.get('form')
return context
def get_form_kwargs(self):
kwargs = super(InternalResetPasswordView, self).get_form_kwargs()
kwargs['request'] = self.request
return kwargs
'''
# self.request.user method obtained from
# https://docs.djangoproject.com/en/dev/topics/class-based-views/generic-editing/
def form_valid(self, form):
current_password = form.cleaned_data['old_password']
new_password = form.cleaned_data['new_password1']
confirm_new_password = form.cleaned_data['new_password2']
user = self.request.user
if user.check_password(current_password) and new_password == confirm_new_password:
user.set_password(new_password)
user.save()
# form.valid() redirects to get_success_url
return super(InternalResetPasswordView, self).form_valid(form)
Nachdem bei this post suchen, ich verstehe immer noch nicht, warum get_form_kwargs verwendet werden muss und warum mit self.request statt self.request.user in diesem Fall gibt __init__() got an unexpected keyword argument 'request'
.
Kann mir das jemand erklären?
Vielen Dank für die Hilfe :)
Können Sie mir sagen, wie sich meine Form erwarten 'Anfrage 'von meinem Code, wie ich es einfach als definieren könnte: ' def get_form_kwargs (self): kwargs = super (InternalResetPasswordView, selbst) .get_form_kwargs() kwargs ['anfrage'] = self.request zurück kwargs'. Sorry über die Formatierung, scheint keine Zeilenumbrüche zu funktionieren. –
Mit der Methode '' 'def get_form-kwargs (self)' '' definieren Sie kein Formular, Sie definieren nur, welche Kwargs Ihre Ansicht an die Form weitergeben werden! Eine Django-Form erwartet bestimmte Kwargs. Wenn Sie versuchen, etwas zu übergeben, was nicht erwartet wird, wird es sich beschweren. Deshalb müssen Sie kwargs.pop() aufrufen, um die Anforderung zu entfernen, die Sie in Ihrer Form-Implementierung verwenden möchten, bevor Sie '' 'super() .__ init ___' '' aufrufen. – Serafeim
Da FormView ein Formular instanziiert, wie nimmt es nicht "Anfrage" als Argument? Noob Frage hier>. < –