11
최근에 FormView에 문제가 발생하여 get_form_kwargs를 사용하는 방법을 찾았습니다.FormView의 get_form_kwargs에 대해 궁금합니다.
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)
this post보고 후, 난 여전히 get_form_kwargs가 사용되는 이유를 이해하고 왜이 경우 대신 self.request.user의 self.request주는 사용하지 않습니다 여기에
내 코드입니다__init__() got an unexpected keyword argument 'request'
.
누군가이 설명을 해줄 수 있습니까? 모든 도움
감사합니다 :)이 get_form_kwargs
방법은 양식의 __init__
에 전달 될 kwargs로와 사전을 반환합니다
당신이 내 양식은'요청을 기대 하시는가하는 방법을 말해 줄 수 : 당신이
request
대신user
을 전달하려는 경우이 같은 양식 클래스를 정의해야합니다 (이 요청은 사용자를 포함하고 있기 때문에 내가 일반적으로 할 것입니다) '내 코드에서 나는 단지로 정의 할 수 있습니다으로 : '데프 get_form_kwargs (자기) : kwargs로 = 슈퍼 (InternalResetPasswordView, 자기) .get_form_kwargs() kwargs로 [ '요청'] = self.request 반환 kwargs'. 서식을 사용하여 죄송합니다. 줄 바꿈이 작동하지 않는 것 같습니다. –''def get_form-kwargs (self)''메소드를 사용하여 Form을 정의하지 않으면, 어떤 kwargs가 당신의 View에 전달 될지를 정의하는 것입니다! django Form은 특정 kwargs를 예상합니다. 예상치 못한 것을 전달하려고하면 불평 할 것입니다. 그래서''super() .__ init ___'''을 호출하기 전에 폼 구현에서 사용하고자하는 요청을 제거하기 위해 kwargs.pop()을 호출해야합니다. – Serafeim
FormView는 폼을 인스턴스화하기 때문에 어떻게'request'를 인자로 취하지 않습니까? 멍청한 질문이 여기에 있습니다. < –