Django实现最佳圈速升序排序,None值后置且按完成圈数降序
排序需求与Django查询解决方案
需求:将最佳圈速(best_lap_time)按升序排列,所有None值置于末尾;末尾的None值需按完成圈数(laps_complete)降序排序。
模型字段定义
... laps_complete = models.IntegerField(null=True) best_lap_time = models.IntegerField(null=True) ...
首次尝试与问题
使用以下查询代码:
simsession['results'] = LeagueSessionResults.objects.all() .filter(session_id=subsession_id, simsession_number=simsession['simsession_number'] ) .order_by(F('best_lap_time').desc(nulls_last=True), "-laps_complete")
结果:None值正确排在末尾,但最佳圈速为降序,不符合升序需求。
二次调整与问题
参考文档将desc改为asc后:
.order_by(F('best_lap_time').asc(nulls_last=True), "-laps_complete")
结果:最佳圈速实现升序,但None值排在了顶部,不符合末尾放置的要求。
正确解决方案
确认数据中存在None值后,使用以下代码即可实现全部需求:
.order_by( F('best_lap_time').asc(nulls_last=True), F('laps_complete').desc(nulls_last=True) )
内容的提问来源于stack exchange,提问作者Byte Insight
相关产品推荐
相关产品推荐

