Возврат значения модели на основе максимального значения другого поля модели

Моя модель

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

Мои взгляды

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

Здравствуйте, ребята, У меня есть модель в Django с двумя полями, имя и метр. Я создал файл views и хочу найти и вывести имя с самым большим метром. Код ниже находит и печатает самый большой счетчик, что хорошо, но теперь то, что я хочу. Я хочу вывести имя, которое связано с этим счетчиком. Есть идеи, как это сделать?

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

представление подключено к HTML-странице

Вы можете сделать примерно следующее:

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

Возвращает список имен объектов Energy_Consuption, которые соответствуют значению max. Обратите внимание, что здесь нужен фильтр, потому что может быть более одного Energy_Consuption с максимальным значением.

Вы можете просто отсортировать QuerySet по meter и взять самый последний элемент. Кроме того, вы можете использовать getattr в случае, если QuerySet пуст.

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

Если ваше поле meter не является уникальным, вы можете предоставить дополнительные поля методу latest для однозначного определения:

biggest_item = EnergyConsumption.objects.latest('meter', 'id')
Вернуться на верх