rawquery 没扎到返回什么_过滤queryset只返回每个我们的最佳结果

由于您的CombineResults模型与CombineEvents有一个FK关系,您可以这样做:combine_events = CombineEvents.objects.filter(team__id=team_id)

for event in combine_events:

result = event.combineresults_set.order_by('-result')[0]

combineresults_set属性是由FK字段自动生成的,但是可以通过指定related_name关键字参数将其设置为更有用的值:

^{pr2}$

注意,这不是对数据库最友好的方法,因为您将有效地访问数据库一次以获得combine_events(一旦开始迭代),然后再次访问该列表中的每个事件。使用prefetch_related()可能会更好,您可以使用它来进行两个DB查询。文档可以是found here。在

但是,prefetch_related()将默认对相关文档执行queryset.all(),您可以通过使用Prefetch对象作为documented here来进一步控制。在

编辑:

抱歉把问题弄错了。获得每个用户在每个事件中的最佳结果(这是我认为您想要的)并不是那么简单。我可能会这样做:from django.db.models import Q, Max

combine_events = CombineEvents.objects \

.filter(team_id=team_id) \

.prefetch_related('combineresults_set')

for event in combine_events:

# Get the value of the best result per user

result = event.combineresults_set.values('user').annotate(best=Max('result'))

# Now construct a Q() object, note this will evaluate the result query

base_q = Q()

for res in result:

# this is the equivalent to base_q = base_q | ....

base_q |= (Q(user_id=res['user']) & Q(result=res['best']))

# Now you're ready to filter results

result = event.combineresults_set.filter(base_q)

您可以阅读更多关于Q对象here,或者使用RawSQL等编写自己的SQL。或者等待有更好主意的人。。在

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值