首页 > 解决方案 > 表单提交后重定向到下一个帖子

问题描述

我正在构建一个博客应用程序,我正在尝试实现一个功能 -

用户可以rate在一个页面中写博客,用户点击Save Rate后,用户将重定向到下一个评论博客页面,用户将访问下一个博客。但它不会重定向到下一个速率博客页面。

模型.py

class Blog(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    title = models.CharField(max_length=500)

Rating_Choice = [('1','1'), ('2','2')]

class Rate(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    blog = models.ForeignKey(Blog, on_delete=models.CASCADE)
    ratings = models.CharField(max_length=1, choices=Rating_Choice)

视图.py

def rate_blog_post(request, blog_id):
    obj = get_object_or_404(Blog, pk=blog_id)

    next_blog = Blog.objects.filter(rate__ratings=None)
    
    if request.method == 'POST':
        form = Form(data=request.POST)
        if form.is_valid():
            post= form.save(commit=False)
            post.user = request.user
            post.blog = data
            post.save()

    # redirect here
            return redirect('rate_blog_post', pk=data.id)

    else:
        form = Form()

    context = {'obj':obj, 'form':form}
    return render(request, rate_blog_post.html', context)

网址.py

    path('rate_blog_post/<int:blog_id>/', views.rate_blog_post, name='rate_blog_post'),

到目前为止我尝试了什么?:

return redirect('rate_blog_post', rate_blog_post=blog_id)

但它表明

找不到关键字参数“{'pk':2}”的“rate_blog_post”反向

注意:-next_blog包含多个博客,但我没有找到任何其他使用方式get_object_or_404(Blog,pk=blog_id, rate__ratings =None),所以它会重定向到下一个博客帖子 ID,它的评分 = 无

比它显示的。

未找到关键字参数“{'pk': 3}”的“rate_blog_post”反向。尝试了 1 种模式:['rate_blog_post/(?P<blog_id>[0-9]+)/$']

我已经尝试了很多次,但没有为我工作。

我将非常感谢您的帮助。谢谢你

所以,我选择了评论。用户将重定向到下一个有选择的帖子None

标签: pythondjangodjango-modelsdjango-views

解决方案


问题出在这里:

next_blog = Blog.objects.filter(rate__ratings=None)

return redirect('rate_blog_post', pk=data.id)

First :查询下一个要访问的单个博客,而不是多个

next_blog = Blog.objects.filter(rate__ratings="").order_by('id')[0]

第二:pk=next_blog.id重定向时使用

return redirect('rate_blog_post', blog_id=next_blog.id)
ratings = models.CharField(max_length=1, choices=Rating_Choice, default="")

这应该可以解决问题


推荐阅读