Как перенаправить ListView в DetailView, если набор запросов представляет собой один объект? - PullRequest
0 голосов
/ 25 марта 2019

У меня есть ListView с пользовательским методом get_queryset () и DetailView, но я бы не хотел показывать ListView, когда набор запросов возвращает только один объект (я хочу перенаправить пользователя в DetailView этого объекта).

Есть ли способ сделать это, используя представления на основе классов? Я попытался с перенаправлением внутри get_queryset () ListView, но он не работает, и я не могу найти ничего полезного в документации класса ListView.

Ответы [ 2 ]

0 голосов
/ 26 марта 2019

Я немного изменил ответ Ивана (использование метода count() было неправильным, и мне также нужно использовать slug вместо pk для моего DetailView), поэтому решение было:

from django.shortcuts import redirect
from django.views.generic import ListView

class MyListView(ListView):
    def get(self, request, *args, **kwargs):
        queryset = self.get_queryset() 
        if len(queryset) == 1:
            return redirect('your_detail_view_url', queryset.first().pk)
        return super().get(request, *args, **kwargs)
0 голосов
/ 25 марта 2019

Вы должны позвонить redirect внутри get:

from django.shortcuts import redirect
from django.views.generic import ListView

class MyListView(ListView):
    def get(self, request, *args, **kwargs):
        queryset = self.get_queryset() 
        if queryset.count() == 1:
            return redirect('your_detail_view_url', pk=queryset.first().pk)
        return super().get(request, *args, **kwargs)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...