gpt4 book ai didi

python - Django 根据值从查询集中获取不同的结果

转载 作者:行者123 更新时间:2023-12-01 01:28:14 26 4
gpt4 key购买 nike

这里,我有我的查询结果

<QuerySet [{'user__first_name': 'aakash', 'user__id': 1, 'games_played': 1}, {'user__first_name': 'prakash', 'user__id': 2, 'games_played': 2}, {'user__first_name': 'prakash', 'user__id': 2, 'games_played': 2}]>

我的查询是,

Games.objects.filter(Match__player__id=1).values('user__first_name', 'user__id').annotate(games_played=Count(Case(When(Q(status=Games.COMPLETE), then='id'))))

所以这里我希望用户 prakash 或 user__id=2 来一次。

最佳答案

您需要在末尾添加 .order_by 以强制查询集“折叠”:

Games.objects.filter(
Match__player__id=1
).values(
'user__first_name', 'user__id', 'accounts__id'
).annotate(
games_played=Count(Case(When(Q(status=Games.COMPLETE), then='id')))
)<b>.order_by('user__first_name', 'user__id', 'accounts__id')</b>

但请注意,这里的JOIN将充当“乘数”:您将计算ids的数量乘以玩家拥有的比赛数量>id=1.

您可能需要添加 distinct=True 以避免在 Count(..) 中出现这种情况:

Games.objects.filter(
Match__player__id=1
).values(
'user__first_name', 'user__id', 'accounts__id'
).annotate(
games_played=Count(Case(When(Q(status=Games.COMPLETE), then='id'))<b>, distinct=True</b>)
).order_by('user__first_name', 'user__id', 'accounts__id')

关于python - Django 根据值从查询集中获取不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53154952/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com