如何注释现有的查询集
How to annotate an existing queryset
我想在基于 class 的视图中使用注释更新查询集。
为什么这样做:
def get_queryset(self):
qs = self.model._default_manager.all().annotate(admin_roles_count=Count('administrators'))
return qs
但这不是吗?:
def get_queryset(self):
qs = super().get_queryset()
qs.annotate(admin_roles_count=Count('administrators'))
return qs
print(qs[0].admin_roles_count)
抛出:
AttributeError: 'MyModel' object has no attribute 'admin_roles_count'
这是因为每次调用 annotate(...)
时都会创建并返回一个新的 Queryset 对象。因此,您需要将函数更新为
def get_queryset(self):
qs = super().get_queryset()
<b>qs =</b> qs.annotate(admin_roles_count=Count('administrators'))
<b>^^^^^^^^</b>
return qs
我想在基于 class 的视图中使用注释更新查询集。
为什么这样做:
def get_queryset(self):
qs = self.model._default_manager.all().annotate(admin_roles_count=Count('administrators'))
return qs
但这不是吗?:
def get_queryset(self):
qs = super().get_queryset()
qs.annotate(admin_roles_count=Count('administrators'))
return qs
print(qs[0].admin_roles_count)
抛出:
AttributeError: 'MyModel' object has no attribute 'admin_roles_count'
这是因为每次调用 annotate(...)
时都会创建并返回一个新的 Queryset 对象。因此,您需要将函数更新为
def get_queryset(self):
qs = super().get_queryset()
<b>qs =</b> qs.annotate(admin_roles_count=Count('administrators'))
<b>^^^^^^^^</b>
return qs