2016-04-28 13 views
0

ユーザー登録用のページを作成しています。 私は顧客が段階的に情報を入力したいので、フォームを分けたいと思います。 たとえば、username、passwordを入力し、次のページに進み、その他の情報を入力します。 私はセッションでそれを実現します。ここ コードは、私は私が最終的にお互いにリンクしたオブジェクトを保存するためRegisterUserViewは、urls.pyせずに直接RegisterProfileViewにリダイレクトしたい一般ビューから一般ビューへのリダイレクト

class RegisterBaseView(CreateView): 
    def form_valid(self, form): 
     for name in form.register_fields: 
      self.request.session.update(
       { 
        name: form.cleaned_data[name] 
       } 
      ) 

     return HttpResponseRedirect(self.success_url) 



class RegisterProfileView(RegisterBaseView): 
    form_class = RegisterProfileForm 
    success_url = reverse_lazy('') 
    template_name = 'player/register_profile.html' 

class RegisterUserView(RegisterBaseView): 
    form_class = RegisterUserForm 
    success_url = reverse_lazy('') 
    template_name = 'player/register_user.html' 

をsnipetです。

success_urlはどうすればいいですか?

答えて

3

URLなしで別のビューにリダイレクトすることはできません。各ビューでrequest.sessionを更新しています。 session.get()メソッドを使用してセッションからデータにアクセスできます。ビューやフォーム内にsaveメソッドを記述したり呼び出さなかったりすると、何も保存されません。

class MiddleView(SomeView): 

    def form_valid(self): 
     if self.request.session.get('name', None) is None: 
      return HttpResponseRedirect('/first_view_url') 
     else: 
      .... 
+0

その後、どのように私は防ぐ必要があります、ありがとう:このようん、任意の真ん中のビューにアクセスするユーザーを防ぐために

class FinalView(CreateView): def form_valid(self, form): name = self.request.session.get('name', None) .... if form.is_valid(): data = form.cleaned_data['data'] your_model = YourModel() your_model.name = name your_model.data = data your_model.save() 

:チェーンのビューの最後のビューでは、このようなデータを保存することができます直接URLを入力して連鎖中のビューにアクセスしますか? – q2ven

+0

あなたはそれを直接置くことも、 'success_url'を使って置くこともできます。別のこととして、各ビューに関連付けられた別々のURLを配置する必要があります。 – ruddra

+0

ユーザーがミドルビューに直接アクセスすると、ビューがユーザーをブロックして最初のチェーンビューにリダイレクトされるのは不可能ですか? – q2ven

関連する問題