到' get_success_url()'或不(Django)

时间:2017-01-31 00:32:13

标签: django

需要明确一个基本概念。在Django中,从form_valid()本身重定向到视图的危害是什么,而不是声明get_success_url()

即。与下面的内容相比,为什么以下是次要的:

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 个答案:

答案 0 :(得分:1)

返回redirect并不一定是次等的。如果你不打电话给超级,那么你需要自己保存表格。复制两行(保存并返回重定向)并不是一个问题。如果super更复杂,那么复制将更成为一个问题,因为更多的机会被遗漏或引入错误。

从好的方面来说,返回重定向响应会明确form_valid将会做什么,而不必查看super的内容。控制表单的保存方式也很有用。

如果您的视图可能是子类,那么您可能不应该返回重定向,因为您将打破任何覆盖get_success_url的子类。