我list_items
在 django admin 中定义了一个函数,如下所示:
def won(self):
result = (Result.objects.filter(user=self)
.select_related('user')
.aggregate(Sum('prize'))['prize__sum'])
return result if result else 0
结果包含用户的外键以及“奖品”,定义了用户获得的积分数量。
使用 Django 调试工具栏,我发现列出的每个用户都会运行 40 个相同的查询来计算每个用户的“赢”值。
SELECT SUM("games_result"."prize") AS "prize__sum" FROM "games_result" WHERE "games_result"."user_id" = 28297
Duplicated 40 times.
我是否在做一些明显错误的事情来导致这个问题?有没有更好的方法来获取带有指向该用户的链接的 Result 对象?