2013-03-18 2 views
0

나는 Django 1.5에서 Generic Views와 그 종류를 혼란스럽게 사용하려고합니다. 지금까지는 views.py에서 함수를 사용했습니다. 함수 접근법에는 더 많은 상용구 코드가 있지만 동시에 개발자로서이를 제어 할 수 있다는 것에 동의합니다. 그럼에도 불구하고 학습을 위해서. 이 부분의 코드를 살펴 보자 :Django 1.5 : 일반보기를 사용하는 방법?

if request.method == 'POST': 
     if 'invitation' in request.session: 
      invitation = Invitation.objects.get(id=request.session['invitation']) 
      profile = invitation.sender.get_profile()    
      form = RegistrationForm(request.POST, is_accept_invite = True, _email = invitation.email) 
     else: 
      form = RegistrationForm(request.POST) 
     if form.is_valid(): 
     ... 

내가 그것을 이해하는 방법은, 일반적인보기는 세 가지 상태를 고려 : GET, POST -> 유효한, POST -> 무효().

그러나 위의 코드는 POST입니다 -> form.validation 전에 조건이 따라

이 내가 생각 해낸 일반보기 것 형태를 인스턴스화 : 내가 필요 가정

class RegisterView(FormView): 
    template_name = 'register.html' 
    form_class = RegisterForm 
    success_url = '/registration_successfull/' 

    def form_valid(self, form): 
     ... 

    def form_invalid(self, form): 
     ... 

get_form(form_class) 또는 get_form_kwargs()을 재정 의하여 내 request.session을 확인하고 이에 따라 RegistrationForm을 인스턴스화하십시오. 그 맞습니까? 어떤 방법으로 그 일을 할 수 있습니까? 나는 문서에 대한 예제를 찾을 수 없었다.

답변

0
class RegisterView(FormView): 
    template_name = 'register.html' 
    form_class = RegisterForm 
    success_url = '/registration_successfull/' 

    def get_form_kwargs(self): 
     kwargs = super(RegisterView, self).get_form_kwargs() 
     if 'invitation' in self.request.session: 
      kwargs['invitation'] = invitation = Invitation.objects.get(id=self.request.session['invitation']) 
      kwargs['profile'] = invitation.sender.get_profile() 
     return kwargs 

    def form_valid(self, form): 
     ... 

    def form_invalid(self, form): 
     ... 
+0

이것은 유망한 것으로 들립니다. 대답으로 받아들이 기 전에 이것을 시험해보기 위해 하루 만주세요. 많은 감사 – Houman