当kwargs-else返回all时应用Django过滤器



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

最新更新