Son zamanlarda FormView ile ilgili bir sorun yaşadım ve bunu yapmanın yolunun get_form_kwargs kullanmak olduğunu fark ettim.FormView'da get_form_kwargs hakkında meraklılık
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 baktıktan sonra, hala get_form_kwargs kullanılacak neden anlamak ve neden bu durumda yerine self.request.user arasında self.request verir kullanarak yoktur: Burada
benim kodudur__init__() got an unexpected keyword argument 'request'
.
Birisi bunu bana açıklayabilir mi? Tüm yardım için
Teşekkür :) get_form_kwargs
yöntem formun __init__
geçilecek kwargs bir sözlük dönecektir
sen benim form 'isteği bekler nasıl söyler misiniz: Eğer
request
yerineuser
geçmek istiyorsanız o zaman bu gibi form sınıfı tanımlamak gerekir (bu istek kullanıcı içerdiğinden Ben genellikle ne olduğunu) 'benim kodundan sadece olarak tanımlayabilirsiniz olarak: ' def get_form_kwargs (öz): kwargs = süper (InternalResetPasswordView, kendinden) .get_form_kwargs() kwargs [ 'istek'] = self.request dönüş kwargs'. Biçimlendirmeyle ilgili özür dilerim, çalışmak için satır sonları görünmüyor. Eğer bir Formunu tanımlayan değil '' 'def get_form-kwargs (öz)' '' metodu ile –, sen kwargs senin Form görünümüne türünü geçecek olan sadece tanımlamaya vardır! Bir django formu belirli kwargs bekliyor. Eğer beklenmedik bir şey geçmeye çalışırsanız şikayet eder. Eğer '' 'süper çağırmadan önce size form uygulamasında kullanmak istediğiniz istek kaldırmak için) (kwargs.pop aramak zorunda yüzden() .__ init ___' ''. FormView bir form başlatır yana – Serafeim
, nasıl bir argüman olarak 'request' almaz? Noob sorusu burada. < –