我正在使用Django CreateView,我想将success_url
设置为相同的视图,以便在发布表单时显示相同的页面,除了表单外,我还可以显示创建的对象如果你想添加一个新的。但是,由于self.object
:
BaseCreateView
为无
def post(self, request, *args, **kwargs):
self.object = None
return super(BaseCreateView, self).post(request, *args, **kwargs)
我的结论是,成功后不会重新显示CreateView吗?
答案 0 :(得分:8)
我看错了地方。
我必须覆盖form_valid
以不重定向到网址(return HttpResponseRedirect(self.get_success_url())
)
def form_valid(self, form):
self.object = form.save()
# Does not redirect if valid
#return HttpResponseRedirect(self.get_success_url())
# Render the template
# get_context_data populates object in the context
# or you also get it with the name you want if you define context_object_name in the class
return self.render_to_response(self.get_context_data(form=form))
答案 1 :(得分:1)
我认为您不需要创建的对象重定向到视图的同一URL。我使用reverse:
class MyModelCreate(CreateView):
model = MyModel
success_url = reverse('path.to.your.create.view')
答案 2 :(得分:1)
现在是 6 年后,我在处理我的项目时遇到了这个问题。如果有人在不久的将来也遇到这个问题,这里有一个简单易行的解决方法,但可能不推荐,但它为我完成了工作。
顺便说一下,我喜欢使用 ClassBasedViews
。
在您的 views.py
文件中
class MyMode(CreateView):
model = my_model
success_url = '/path-to-webpage/'
所以我基本上做的是在 success_url
下的网页路径中进行硬编码,这解决了问题。
当您不打算随时更改您的 URLpatterns 时,此方法有效,否则您还必须更改 views.py
文件中的 URL。