需要明确一个基本概念。在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")
答案 0 :(得分:1)
返回redirect
并不一定是次等的。如果你不打电话给超级,那么你需要自己保存表格。复制两行(保存并返回重定向)并不是一个问题。如果super
更复杂,那么复制将更成为一个问题,因为更多的机会被遗漏或引入错误。
从好的方面来说,返回重定向响应会明确form_valid
将会做什么,而不必查看super
的内容。控制表单的保存方式也很有用。
如果您的视图可能是子类,那么您可能不应该返回重定向,因为您将打破任何覆盖get_success_url的子类。