Django CreateForm-成功时重定向到同一表单
我有一个包含博客帖子的页面,在评论列表上方有一个评论表单,允许用户添加评论。 博客文章具有以下url(其中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']}) 但是,
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