根据模型的另一个字段的最大值返回模型的值

Posted

技术标签:

【中文标题】根据模型的另一个字段的最大值返回模型的值【英文标题】:Return a value of a model based on the max value of another field of the model 【发布时间】:2021-10-12 17:28:29 【问题描述】:

我在 Django 中有一个模型,它有两个字段:名称和仪表。我创建了一个视图文件,我想找到并打印具有最大仪表的名称。下面的代码查找并打印最大的仪表本身,这很好,但不是我想要的。我想打印与该仪表相关的名称。知道该怎么做吗?

我的观点:

 def details (request):
  top_meter = Energy_Consuption.objects.aggregate(Max('meter'))
  return render(request,'details.html', 'top_meter':top_meter)

(视图连接到 HTML 页面。)

我的模特:

class Energy_Consuption(models.Model):
  name=models.IntegerField()
  meter=models.IntegerField()
  class Meta:
    db_table:'Energy_Consuption'

【问题讨论】:

【参考方案1】:

你可以这样做:

Energy_Consuption.objects.filter(
    meter=Energy_Consuption.objects.aggregate(Max('meter'))['meter__max']
).values_list('name', flat=True)

这将返回与最大值匹配的Energy_Consuption 对象的名称列表。注意这里需要过滤,因为Energy_Consuption的最大值可能不止一个。

【讨论】:

【参考方案2】:

您可以按meter 对查询集进行排序并获取最新的项目。 此外,您可以在 QuerySet 为空的情况下使用getattr

biggest_item = EnergyConsumption.objects.latest('meter')
biggest_name = getattr(biggest_item, 'name', None)

如果您的meter 字段不是唯一的,您可以为latest 方法提供额外的字段以消除歧义:

biggest_item = EnergyConsumption.objects.latest('meter', 'id')

【讨论】:

以上是关于根据模型的另一个字段的最大值返回模型的值的主要内容,如果未能解决你的问题,请参考以下文章

python django查询mysql表字段的最大值

如何限制 Django 模型中数值字段的最大值?

07_django数据模型(model)字段

根据另一个字段的值验证 Django 模型字段?

日期时间字段的最大值

根据计算的值 [Swift] 使用滑块更改 TextField 中的值