我想显示所有团队对象的列表,或者缩小到仅与通过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