4

所以很长一段时间以来,我一直在 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 调试工具栏验证。我发现在某些情况下,减少查询数量所节省的任何费用都会丢失到更复杂的计数查询中。

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

4

0 回答 0