Я пытаюсь перенаправить на URL PK, уже используя PK внутри представления на основе класса.
В принципе, после редактирования сообщения я хочу перенаправить пользователя в комнату, где находится сообщение.
Ближе всего я подошел к этому, когда вручную передал PK комнаты.
Насколько я знаю, передача двух PK внутри функции не разрешена в Django.
Не могли бы вы помочь мне решить эту проблему, так как я знаю, что мои знания ограничены и не могу найти хороший ответ.
(Я использовал <a href="{{request.META.HTTP_REFERER}}">Go Back</a></button>
для функциональности возврата назад в шаблоне, но я хочу изменить это, так как из того, что я прочитал, это не лучшая практика).
Спасибо за терпение
url.py
urlpatterns = [
path('login/', views.loginPage, name="login"),
path('logout/', views.logoutUser, name="logout"),
path('register/', views.registerPage, name="register"),
path('', views.home, name="home"),
path('room/<str:pk>/', views.room, name="room"),
path('profile/<str:pk>/', views.userProfile, name="user-profile"),
path('create-room/', views.createRoom, name="create-room"),
path('update-room/<str:pk>/', views.updateRoom, name="update-room"),
path('delete-room/<str:pk>/', views.deleteRoom, name="delete-room"),
path('delete-message/<str:pk>/', views.deleteMessage, name="delete-message"),
path('update-message/<str:pk>/', views.updateMessage, name="update-message"),
]
Виды
from django.http.response import HttpResponse
from django.shortcuts import render, redirect
from django.contrib import messages
from django.contrib.auth.decorators import login_required
from django.db.models import Q
from django.contrib.auth.models import User
from django.contrib.auth import authenticate, login, logout
from django.contrib.auth.forms import UserCreationForm
from .models import Message, Room, Topic, Message
from .forms import RoomForm, MessageForm
def room(request, pk):
room = Room.objects.get(id=pk)
room_messages = room.message_set.all().order_by('created')
participants = room.participants.all()
if request.method == 'POST':
message = Message.objects.create(
user=request.user,
room=room,
body=request.POST.get('body')
)
room.participants.add(request.user)
return redirect('room', pk=room.id)
context = {'room': room, 'room_messages': room_messages,
'participants': participants,}
return render(request, 'base/room.html', context)
@login_required(login_url='login')
def deleteMessage(request, pk):
message = Message.objects.get(id=pk)
if request.user != message.user:
return HttpResponse('Unable to delete message')
if request.method == 'POST':
message.delete()
return redirect('home')
return render(request, 'base/delete.html',{'obj':message})
@login_required(login_url='login')
def updateMessage(request, pk):
message = Message.objects.get(id=pk)
form = MessageForm(instance=message)
if request.user != message.user:
return HttpResponse('Unable to edit message')
if request.method == 'POST':
form = MessageForm(request.POST, instance=message)
if form.is_valid():
form.save()
return redirect(**After the message is edited I want to redirect to the room where message was originally posted**)
return render(request, 'base/message_form.html',{'obj':message, 'form': form})
message_form.html
<button class="btn btn--dark" type="submit"><a href="{{request.META.HTTP_REFERER}}">Go Back</a></button>
<button class="btn btn--main" type="submit">Update your message</button>