Django фильтр применяется, когда kwargs else возвращает все

Я хотел бы вывести список всех объектов Team или сузить список только до тех, которые относятся к country, переданных через параметр kwarg.

class TeamListView(ListView):
    """View to display all or filtered teams."""
    model = Team

    def get_queryset(self):
        filters = {}
        country = self.kwargs['country'] if 'country' in self.kwargs else None
        filters.update({ 'country': country })
        return super(TeamListView, self).get_queryset() \
            .filter(**filters)

Я могу легко добиться фильтрации, но для отсутствия параметра вместо всех объектов я получаю None.

Конечно, я знаю, что могу вернуть super()...all() вместо filter(), но это выглядит некрасиво, и я спрашиваю, есть ли какое-нибудь волшебное ключевое слово типа __all__ или я должен дать какой-нибудь Q-объект, но как его подготовить ?

Вы можете фильтровать с помощью:

class TeamListView(ListView):
    """View to display all or filtered teams."""
    model = Team

    def get_queryset(self):
        qs = super().get_queryset()
        if 'country' in self.kwargs:
            return qs.filter(country=self.kwargs['country'])
        return qs  # 🖘 otherwise return the entire queryset
Вернуться на верх