Get minimum value field name using aggregation in django
Solution 1
You can try below code to get exact thing you want
>>> from django.db.models import Min
>>> Choclate.objects.filter().values_list('name').annotate(Min('price')).order_by('price')[0]
(u'First1', 10)
>>>
First1
is the field name having price = 10
which is lowest value.
Solution 2
If you pass the Min
as positional argument, then the field's name is price__min
. Otherwise, if you pass it as keyword argument, i.e. aggregate(my_min=Min('price'))
, then it will be available with the same name as the argument, in this case my_min
. Docs
Solution 3
For Min and Max you may order your values (QuerySet result) and grab the first() and last():
chocolate_list = Chocolate.objects.values_list('name', 'price')
min = chocolate_list.order_by('price').first()
max = chocolate_list.order_by('price').last()
PS: Remove the filter() if you are not assigning nothing. With values_list() you are implicitly instancing the QuerySet class
Shiva Krishna Bavandla
I love to work on python and django using jquery and ajax.
Updated on June 22, 2022Comments
-
Shiva Krishna Bavandla almost 2 years
I have a model with some fields like below
class Choclate(models.Model): name = models.CharField(max_length=256) price = models.IntegerField()
So i want to get the field name that has the
lowest price
value, so in order to get thelowest price
value, we can do like below usingAggregations
from django.db.models import Avg, Max, Min choclates = Choclate.objects.all() lowest_price = choclates.aggregate(Min('price'))
So finally how to get the
field name
, that related to lowest price value in django ?