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

Моя цель - перенаправить клиента на детальное представление сеанса чата, если он пытается открыть новый сеанс чата с кем-то, с кем у него уже есть сеанс чата. Все работает нормально, но когда я попытался открыть дубликат сеанса чата, он не был перенаправлен, и все, что я получил, это пустой json-ответ

//views.py

class ChatSessionListView(generics.ListCreateAPIView):
serializer_class = ChatSessionSerializer
permission_classes = [permissions.IsAuthenticated]

def get_queryset(self):
    return ChatSession.objects.filter(Q(initiator=self.request.user) | Q(receiver=self.request.user))

def perform_create(self, serializer):
    receiver_username = self.request.data['username']
    receiver = get_object_or_404(User, username=receiver_username)
    chat_session = ChatSession.objects.filter(Q(initiator=self.request.user, receiver=receiver) | Q(initiator=receiver, receiver=self.request.user))
    if chat_session.exists():
        return redirect('v1:chat:chat_session_detail', session_id=chat_session[0].pk)
    else:
        serializer.save(initiator=self.request.user, receiver=receiver)

// urls.py

urlpatterns = [
path('', views.ChatSessionListView.as_view(), name='chat'),
path('<str:session_id>/', views.ChatSessionDetailView.as_view(), name='chat_session_detail')

]

Вы можете не возвращать HTTP-ответ в perform_create. perform_create должен только создать новый объект с данными сериализатора: он создает сериализатор с помощью request.data, затем проверяет, действителен ли сериализатор, и затем выполняет создание.

Вы можете переопределить метод create:

 class ChatSessionListView(generics.ListCreateAPIView):
    serializer_class = ChatSessionSerializer
    permission_classes = [permissions.IsAuthenticated]

    def get_queryset(self):
        return ChatSession.objects.filter(Q(initiator=self.request.user) | Q(receiver=self.request.user))

    def create(self, request, *args, **kwargs):
        receiver = get_object_or_404(User, username=self.request.data['username'])
        chat_sessions = ChatSession.objects.filter(
            Q(initiator=self.request.user, receiver=receiver) |
            Q(initiator=receiver, receiver=self.request.user)
        )
        chat_session = chat_sessions.first()
        if chat_session is None:
            serializer = ChatSessionSerializer(data=request.data)
            if serializer.is_valid():
              chat_session = serializer.save(initiator=self.request.user, receiver=receiver)        
       return redirect('v1:chat:chat_session_detail', session_id=chat_session.pk)
Вернуться на верх