如何注释现有的查询集

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

这是因为 lazy loading of QuerySets