django:count-related模型,其中相关数据库上的注解具有特定值,并将count存储在注解中

tuwxkamq  于 2021-07-13  发布在  Java
关注(0)|答案(0)|浏览(201)

我有两个模型 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

我不知道为什么当我要计算行数时,有多少列是很重要的。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题