在Django查询中使用Aggregate(Max())时如何提取实际数值
解决Django聚合查询结果提取数值的问题
Django的aggregate()方法返回的是字典类型,而非模型实例,所以你不能用点语法(比如.latitude)访问值。要提取实际数值,有几种简单可行的方法:
直接通过字典键取值
聚合结果的默认键格式是字段名__聚合函数名,这里就是latitude__max,直接用字典索引获取即可:max_latitude_value = max_latitude['latitude__max'] print(max_latitude_value) # 输出 51.6639002给聚合结果指定自定义键名
要是觉得默认键名不够直观,可以在Max里通过name参数自定义键,后续用自定义键取值:from django.db.models import Max max_latitude = Model.objects.aggregate(max_lat=Max('latitude')) max_latitude_value = max_latitude['max_lat']安全取值(处理空结果场景)
如果查询可能返回空结果(比如数据库中无对应数据),可以用dict.get()方法避免KeyError,还能指定默认值:max_latitude_value = max_latitude.get('latitude__max', 0) # 第二个参数为可选默认值
内容的提问来源于stack exchange,提问作者PhilM
相关产品推荐
相关产品推荐

