虚拟空间可以做视频网站么,帝国cms 门户网站,企业查询软件排行榜,asp.net程序做的网站安全吗如果你的Admin后台中有很多计算字段#xff0c;那么你需要对每个对象运行多个查询#xff0c;这会使你的Admin后台变得非常慢。要解决此问题#xff0c;你可以重写管理模型中的get_queryset方法使用annotate聚合函数来计算相关的字段。
以下示例为Origin模型的中ModelAdmin…如果你的Admin后台中有很多计算字段那么你需要对每个对象运行多个查询这会使你的Admin后台变得非常慢。要解决此问题你可以重写管理模型中的get_queryset方法使用annotate聚合函数来计算相关的字段。
以下示例为Origin模型的中ModelAdmin管理模型
admin.register(Origin)
class OriginAdmin(admin.ModelAdmin):list_display (name, hero_count, villain_count)def hero_count(self, obj):return obj.hero_set.count()def villain_count(self, obj):return obj.villain_set.count() 这会在列表视图页面的每行添加两个额外的查询。要解决计算的性能问题你可以重写get_queryset并使用annotate来进行计算然后在ModelAdmin方法中使用该annotated聚合字段。
将ModelAdmin管理模型修改如下
admin.register(Origin)
class OriginAdmin(admin.ModelAdmin):list_display (name, hero_count, villain_count)def get_queryset(self, request):queryset super().get_queryset(request)queryset queryset.annotate(_hero_countCount(hero, distinctTrue),_villain_countCount(villain, distinctTrue),)return querysetdef hero_count(self, obj):return obj._hero_countdef villain_count(self, obj):return obj._villain_count 每个对象没有额外的查询。你的Admin后台用起来仍像调用annotate聚合函数前一样流畅。
显示效果