I would like to display list of all Team objects or narrow to only those related to country passed via kwarg parameter.
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)
I can easilly achieve filtering but for no parameter instead of all objects I get None.
Of course I know, I can return super()...all() instead of filter() but that looks ugly and I'm asking if there's any magic keyword like __all__
or I should give some Q object but how to prepare it?
You can filter with:
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