2017-01-31 6 views
1

基本コンセプトをクリアする必要があります。 Djangoでは、get_success_url()と宣言する代わりに、form_valid()からのビューにリダイレクトするとどうなりますか?を 'get_success_url()'に設定するか(Django)

I.e.なぜその下に何に比べ、劣っ以下の通りです:

class PostCreateView(CreateView): 
    model = Post 

    def form_valid(self, form): 
     # do something 
     return redirect("home") 

class PostCreateView(CreateView): 
    model = Post 

    def form_valid(self, form): 
     # do something 
     return super(CreateView, self).form_valid(form) 


    def get_success_url(self): 
     return reverse("home") 

答えて

1

redirectを返すことは必ずしも劣っていません。スーパーに電話しない場合は、フォームを自分で保存する必要があります。 2行の複製(リダイレクトの保存とリターン)は実際問題ではありません。 superがより複雑な場合は、機能がなくなる可能性が増したり、エラーが発生したりする可能性があるため、複製が問題になります。

プラスの側では、superが何をしていなくても、リダイレクト応答を返すと、form_validが何をするのかが明白になります。フォームがどのように保存されるかを制御することも便利です。

ビューがサブクラス化される可能性がある場合は、get_success_urlをオーバーライドするサブクラスが破損するため、リダイレクトを返さないでください。