Get minimum value field name using aggregation in django

16,714

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.

Documentation Link

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

Share:
16,714
Shiva Krishna Bavandla
Author by

Shiva Krishna Bavandla

I love to work on python and django using jquery and ajax.

Updated on June 22, 2022

Comments

  • Shiva Krishna Bavandla
    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 the lowest price value, we can do like below using Aggregations

    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 ?