我想在基于类的视图中使用批注更新查询集。
为什么这样做:
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'
答案 0 :(得分:3)
这是因为每次调用annotate(...)
时都会创建并返回一个新的Queryset对象。因此,您需要将功能更新为
def get_queryset(self):
qs = super().get_queryset()
qs = qs.annotate(admin_roles_count=Count('administrators'))
^^^^^^^^
return qs