Django CreateForm-成功时重定向到同一表单

Django CreateForm-成功时重定向到同一表单,django,django-forms,django-views,Django,Django Forms,Django Views,我有一个包含博客帖子的页面,在评论列表上方有一个评论表单,允许用户添加评论。 博客文章具有以下url(其中blog\u id是url参数): 首先,这是否一个合理的实施方式 其次,除了success\u url之外,这里的一切都正常。提交表单时应创建注释,并重定向到同一页面。我应该如何定义成功\u url? 我想使用: success_url = reverse_lazy(BlogPostView, kwargs={'blog_id': self.kwargs['blog_id']}) 但是,

我有一个包含博客帖子的页面,在评论列表上方有一个评论表单,允许用户添加评论。 博客文章具有以下url(其中
blog\u id
是url参数):

首先,这是否一个合理的实施方式

其次,除了
success\u url
之外,这里的一切都正常。提交表单时应创建注释,并重定向到同一页面。我应该如何定义
成功\u url
? 我想使用:

success_url = reverse_lazy(BlogPostView, kwargs={'blog_id': self.kwargs['blog_id']})

但是,这失败了,因为BlogPostView是在它自己的定义中使用的。

使用url
名称
而不是视图,根据文档,不鼓励使用该视图:

您可以使用以下任一选项来反转URL:

使用指定的URL

reverse('news-archive')

传递可调用对象(不鼓励这样做,因为您不能 以这种方式反转名称空间视图。)

来自新闻导入视图

reverse(views.archive)

并使用
get\u success\u url
方法传递
kwargs
而不是
success\u url

class BlogPostView(CreateView):
    # ...

    def get_success_url(self, **kwargs):
        return reverse_lazy('BlogPostView', kwargs={'blog_id': self.kwargs['blog_id'])
                             # ^ url name

您的完整url模式是什么?另外,请注意文档中的
#传递一个可调用对象#(不鼓励这样做,因为您不能以这种方式反转名称空间视图)。
@guillermochamorro我已经更新了这个问题。这是一种不好的方法,还是有办法解决?你没有试着使用这个名称:
reverse\u lazy(“BlogPostView”…
?@guillermochamorro,没有任何参数它无法解决。视图需要一个blog\u id参数来知道显示哪个博客解决了这个问题,谢谢。如果你想把它作为一个答案,我会接受它
class BlogPostView(CreateView):
    template_name = 'blog_post.html'
    form_class = BlogCommentCreationForm
    success_url = ???

    def get_context_data(self, *args, **kwargs):
        context = super().get_context_data(*args, **kwargs)
        context['blog_post'] = CompanyBlogPost.objects.get(id=self.kwargs['blog_id'])
        return context

    def form_valid(self, form):
        form.instance.author = self.request.user
        form.instance.publish_datetime = dt.now()
        form.instance.blogpost = CompanyBlogPost.objects.get(id=self.kwargs['blog_id'])
        return super().form_valid(form)
success_url = reverse_lazy(BlogPostView, kwargs={'blog_id': self.kwargs['blog_id']})
class BlogPostView(CreateView):
    # ...

    def get_success_url(self, **kwargs):
        return reverse_lazy('BlogPostView', kwargs={'blog_id': self.kwargs['blog_id'])
                             # ^ url name