Skip to main content
 首页 » 编程设计

python之Django 在一个过滤器集中获取最新的 3 个结果

2024年10月25日41softidea

我正在尝试创建执行以下操作的查询:

  • 仅列出最近 4 个月的结果 - 检查
  • 删除最佳时间为 0 的结果 - 检查
  • 列出独特的俱乐部和球队 - 检查
  • 从集合中获取最佳时间 - 检查
  • 整理俱乐部和球队 - 检查

我现在唯一需要的条件是:

  • 如果俱乐部或团队列出超过 3 次(在获得最佳时间之前),则只取最近的 3 次结果。

-

place = Placing.objects \ 
.filter(event_date__gte=start_date) \ 
.filter(best_time__gt=0) \ 
.values_list('club_name','team_name') \ 
.annotate(Min('best_time')) \ 
.order_by('club_name','team_name') 

请您参考如下方法:

您将不得不LIMIT您的查询(通过 Python 切片),这意味着您还必须分别查询每个团队,因为我不认为 LIMIT 子句可以多次表达 - 从好的方面来说,您将能够 aggregate(Min('best_time'))!

如果您需要一个包含Placing 对象的QuerySet,您可以构建一个使用| 运算符连接结果的查询集。

另外,Club 和 Team 有什么区别?

编辑:可能是这样的

from django.db.models import Min 
besties = {} 
for team in teams: 
    besties[team] = Placing.objects \ 
    .filter(event_date__gte=start_date, best_time__gt=0).order_by(-event_date) \ 
    .filter(team_name=team)[:3].aggregate(Min('best_time'))['best_time__min']