Перенаправление на следующий пост после отправки формы
Я создаю приложение для блога и пытаюсь реализовать функцию -
В котором пользователь может rate
блогов на одной странице и после нажатия Save Rate
пользователь будет перенаправлен на страницу следующего блога обзора и пользователь будет оценивать следующий блог.
Но он не перенаправляет на страницу следующего блога с рейтингом.
models.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)
views.py
def rate_blog_post(request, blog_id):
obj = get_object_or_404(Blog, pk=blog_id)
next_blog = Question.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)
- Форма работает нормально, она сохраняет рейтинги
Что я уже пробовал? :
- Я пробовал использовать
next_blog
, например :-
return redirect('rate_blog_post', rate_blog_post=blog_id)
Но он показал
Повтор для 'rate_blog_post' с ключевыми аргументами '{'pk': 2}' не найден
Я пробовал много раз, но у меня ничего не получилось.
Я буду очень признателен за вашу помощь. Спасибо
Итак, я сделал выбор отзывов. И пользователь будет перенаправлен на следующий пост, который имеет выбор None
,
Проблема кроется здесь :
next_blog = Blog.objects.filter(rate__ratings=None)
return redirect('rate_blog_post', pk=data.id)
Первый : Запрашивает один блог, который вы хотите посетить следующим, а не несколько
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="")
Это должно решить проблему