我有两个模型 Pick
以及 GamePick
. GamePick
有一个 ForeignKey
关系 Pick
,可在上访问 Pick.game_picks
.
我已经准备好了 GamePick
使用自定义查询集和管理器,以便在检索 GamePick
和经理在一起 objects
是用字段注解的 is_correct
基于其他字段的值。
现在我要做的是数一数正确的数字 GamePicks
指向一个特定的 Pick
.
一种简单的方法是使用python中的方法:
class Pick(models.Model):
...
def count_correct(self):
return self.game_picks.filter(is_correct=True).count()
到现在为止,一直都还不错。
但现在,我想为每一个 Pick
有了这个数,就说是 correct_count
. 这样我就可以点餐了 Pick
比如说 Pick.objects.all().order_by("correct_count")
.
我该怎么做?
我就在这里:
correct_game_picks = GamePick.objects.filter(
pick=models.OuterRef("pk"),
is_correct=True
)
picks = Pick.objects.annotate(
correct_count=models.Count(correct_game_picks.values("pk"))
)
这是什么 pick.query
给了我:
SELECT
"picks_pick"."id",
"picks_pick"."picker",
"picks_pick"."pot_id",
COUNT((
SELECT U0."id" FROM "picks_gamepick" U0
INNER JOIN "games_game" U1 ON (U0."game_id" = U1."id")
WHERE ((U0."picked_team_id" = U1."winning_team_id") AND U0."pick_id" = "picks_pick"."id")
)) AS "correct_count"
FROM "picks_pick"
GROUP BY "picks_pick"."id", "picks_pick"."picker", "picks_pick"."pot_id"
我不擅长sql,但它似乎应该是正确的。
在我的测试中,它返回1时,它应该2为2正确 GamePick
属于 Pick
.
有人有什么指示吗?
顺便说一句,如果我把 .values("pk")
我得到这个错误:
E django.db.utils.OperationalError: sub-select returns 5 columns - expected 1
我不知道为什么当我要计算行数时,有多少列是很重要的。
暂无答案!
目前还没有任何答案,快来回答吧!