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