Перенаправление на тот же post_id после редактирования сообщения

Я создал сайт форума на Django, где пользователи могут размещать вопросы/ответы и редактировать их. После редактирования ответа я хочу перенаправить пользователя на страницу текущего отредактированного сообщения. например, если пользователь редактирует ответ, который был размещен на вопрос с id 4 (url которого (http://127.0.0.1:8000/discussion/4)), то после редактирования он должен перенаправлять на тот же url

Post view.py

def forum(request):
user = request.user

profile = Profile.objects.all()
if request.method=="POST": 
    form=PostContent(request.POST)
    if form.is_valid():  
      user = request.user
      image = request.user.profile.image
      content = request.POST.get('post_content','')
      post = Post(user1=user, post_content=content, image=image)
      post.save()
      messages.success(request, f'Your Question has been posted successfully!!')
      return redirect('/forum')
    else:
        form=PostContent()  
posts = Post.objects.filter().order_by('-timestamp')
form= PostContent()
context={
    'posts':posts,
    'form':form
}
return render(request, "forum.html",context)

reply view.py

def discussion(request, myid):
post = Post.objects.filter(id=myid).first()
replies = Replie.objects.filter(post=post)
if request.method=="POST":
    form=ReplyContent(request.POST)
    if form.is_valid():  
      user = request.user
      image = request.user.profile.image
      desc = request.POST.get('reply_content','')
      post_id =request.POST.get('post_id','')
      reply = Replie(user = user, reply_content = desc, post=post, image=image)
      reply.save()
      messages.success(request, f'Your Reply has been posted successfully!!')
      return redirect(f'/discussion/{post_id}')
    else:
        form=ReplyContent()
form= ReplyContent()
         
return render(request, "discussion.html", {'post':post, 'replies':replies,'form':form})    

Редактирование просмотра ответа

def edit_reply(request, pk):

reply = Replie.objects.get(id=pk)

if request.method == 'POST':
    form = UpdateReplyForm(request.POST, instance=reply)
    if form.is_valid():
        form.save()
        messages.success(request,"Reply updated successfully!")
        return redirect('/forum')
else:
    form = UpdateReplyForm(instance=reply)
context = {
    'form': form
}
return render(request, 'edit_reply.html', context)

в настоящее время после редактирования ответа я повторно обращаюсь

Вы можете перенаправить его в discussion вид с его pk, передав args=[reply.post.id] в edit_reply вид.

Попробуйте это: views.py

from django.shortcuts import render, redirect
from django.urls import reverse

def edit_reply(request, pk):
    reply = Replie.objects.get(id=pk)

    if request.method == 'POST':
        form = UpdateReplyForm(request.POST, instance=reply)
        if form.is_valid():
            form.save()
            messages.success(request, "Reply updated successfully!")
            return redirect(reverse('dashboard:discussion', args=[reply.post.id]))
    else:
        form = UpdateReplyForm(instance=reply)
    context = {
        'form': form
    }
    return render(request, 'home/edit_reply.html', context)

Note: Формы в django требуют Form в качестве суффикса, поэтому будет лучше, если он изменится на PostContentForm и ReplyContentForm с PostContent и ReplyContent соответственно.

Должно быть

return f'{self.user} Post'
не

return f'{self.user`} Post'

Поскольку это не является никаким полем в Replie модели.

Note: Имена ForeignKey обычно пишутся в собственном имени и тоже в snake_case, будет лучше, если вы измените user1 на user в Post модели.

Для лучшего понимания:

Если имя таблицы PizzaTopingCategory, то при создании ForeignKey вы должны назвать его как

pizza_toping_category=models.ForeignKey(PizzaTopingCategory, on_delete=models.CASCADE)

Редактирование:

Вам необходимо выяснить post_id, чтобы вы могли отправить его через:

Попробуйте сделать это в представлении delte_reply:

def delete_reply(request, pk=None):
    reply = Replie.objects.filter(id=pk)
    reply_instance = get_object_or_404(Replie,id=pk)
    post_pk=reply_instance.post.id
    
    reply.delete()
    return redirect(reverse('dashboard:discussion', args=[post_pk]))

Для передачи pk в представлении discussion необходимо написать return redirect(reverse('dashboard:discussion', args=[reply.post.id])) в представлении edit_post:

views.py


def edit_post(request, pk):

    post = Post.objects.get(id=pk)
    if request.method == 'POST':
        form = UpdatePostForm(request.POST, instance=post)
        if form.is_valid():
            form.save()
            messages.success(request, "Post updated successfully!")
            return redirect(reverse('dashboard:discussion', args=[post.id]))
    else:
        form = UpdatePostForm(instance=post)
    context = {
        'form': form
    }
    return render(request, 'home/edit_post.html', context)
Вернуться на верх