Get minimum value field name using aggregation in django
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.
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
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