You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 06:21:01