当 kwargs else return all 时应用 Django 过滤器
Django filter applied when kwargs else return all
我想显示所有 Team 对象的列表,或者缩小到仅显示与通过 kwarg 参数传递的 country 相关的对象。
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。
我当然知道,我可以 return 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()
<strong>if 'country' in self.kwargs</strong>:
return qs.filter(country=self.kwargs['country'])
return qs # 🖘 otherwise return the entire queryset
我想显示所有 Team 对象的列表,或者缩小到仅显示与通过 kwarg 参数传递的 country 相关的对象。
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。
我当然知道,我可以 return 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()
<strong>if 'country' in self.kwargs</strong>:
return qs.filter(country=self.kwargs['country'])
return qs # 🖘 otherwise return the entire queryset