在不注释计数查询的情况下注释Django ModelAdmin列表

时间:2016-06-27 17:53:00

标签: django django-models django-annotate

因此很长一段时间以来,我一直在使用ModelAdmins进行注释,以便将复杂的数字和相关字段添加到列表管理显示中。这是一个简单的计数示例。

class MyClassAdmin(admin.ModelAdmin):
    list_display [ .. 'capacity', ..]

    def get_queryset(self, request):
        return super(MyClassAdmin, self).get_queryset(request).annotate(
            capacity=Count('spaces')
        )

    def capacity(self, obj):
        return obj.capacity

在实践中,我在一些ModelAdmins上做了四到五次。该查询比股票查询慢,但它比执行1 + 100查询更快,因为相关数据被拉入。

然而,Django对列表视图进行了计数查询。在表格下方,您会看到xxx modelnames消息。 这是通过相同的带注释的查询生成的。使用Django Debug Toolbar验证。我发现在某些情况下,减少查询数量的任何节省都会丢失到更复杂的计数查询中。

我知道覆盖get_queryset允许您过滤数据,但这不是我使用它的方式。有没有更好的东西,我可以覆盖,允许计数通过未注释,但让我注释列表显示?

0 个答案:

没有答案