0

私はDjango1.5のGenericViewsを使おうとしていますが、そのような混乱を招きます。これまで、views.py内の関数を使用してきました。関数アプローチにはより多くの定型コードがあることに同意しますが、同時に、開発者としてそれをより細かく制御できます。それにもかかわらず、学習のために。この部分的なコードを考えてみましょう:

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-> Valid、POST-> invalid()の3つの状態が考慮されます。

ただし、上記のコードは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):
        ...

request.sessionをオーバーライドget_form(form_class)または確認し、それに応じてRegistrationFormをインスタンス化する必要があると思います。get_form_kwargs()あれは正しいですか?それを行う方法の例はありますか?ドキュメントに例が見つかりませんでした。

4

1 に答える 1

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):
        ...
于 2013-03-18T21:09:01.723 に答える