django createview与success_url是同一个视图?

时间:2014-10-25 15:27:49

标签: django django-views

我正在使用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吗?

3 个答案:

答案 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。