Django如何查询模型某字段最大值对应的另一关联字段的值
Django查询最大meter值对应name字段的实现方案
现有代码问题说明
你当前使用的aggregate(Max('meter'))方法只会返回包含meter最大值的字典(格式为{'meter__max': 具体最大值}),不会返回最大值对应的完整模型记录,因此无法获取关联的name字段值。
实现方案
方案1:获取单条最大meter对应的记录(适用最大值唯一场景)
直接对meter字段降序排序,取第一条记录即可同时拿到name和meter值,修改视图代码如下:
def details(request): # 按meter降序排序,取第一条记录 top_record = Energy_Consuption.objects.order_by('-meter').first() return render(request, 'details.html', {'top_record': top_record})
前端HTML渲染示例:
<p>最大能耗名称:{{ top_record.name }}</p> <p>最大能耗值:{{ top_record.meter }}</p>
方案2:获取所有最大meter对应的记录(适用多条记录meter同为最大值的场景)
如果存在多个记录的meter值都是最大值,可以先查最大值,再过滤所有符合条件的记录:
def details(request): # 先查meter最大值 max_meter = Energy_Consuption.objects.aggregate(Max('meter'))['meter__max'] # 过滤所有meter等于最大值的记录 top_records = Energy_Consuption.objects.filter(meter=max_meter) return render(request, 'details.html', {'top_records': top_records})
前端HTML循环渲染示例:
<ul> {% for record in top_records %} <li>名称:{{ record.name }},能耗值:{{ record.meter }}</li> {% endfor %} </ul>
额外注意事项
你提供的模型代码存在语法错误,Meta类中定义表名需要用等号而非冒号,修正后代码如下:
class Energy_Consuption(models.Model): name = models.IntegerField() meter = models.IntegerField() class Meta: db_table = 'Energy_Consuption'
内容的提问来源于stack exchange,提问作者Sarandis
相关产品推荐
相关产品推荐

