Возврат значения модели на основе максимального значения другого поля модели
Моя модель
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')