因此很长一段时间以来,我一直在使用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
允许您过滤数据,但这不是我使用它的方式。有没有更好的东西,我可以覆盖,允许计数通过未注释,但让我注释列表显示?