20

我有一个模型,其中一些字段如下所示

class Choclate(models.Model):
    name = models.CharField(max_length=256)
    price = models.IntegerField()

所以我想获取具有lowest price 值的字段名称,所以为了获取lowest price值,我们可以像下面这样使用Aggregations

from django.db.models import Avg, Max, Min

choclates = Choclate.objects.all()
lowest_price = choclates.aggregate(Min('price'))

那么最后如何获得field name与django中最低价格相关的?

4

4 回答 4

17

您可以尝试下面的代码来获得您想要的确切内容

>>> from django.db.models import Min
>>> Choclate.objects.filter().values_list('name').annotate(Min('price')).order_by('price')[0]
(u'First1', 10)
>>>

First1price = 10是具有最小值的字段名称。

文档链接

于 2013-10-30T09:21:35.983 回答
3

如果您传递Minas 位置参数,则该字段的名称为price__min. 否则,如果您将其作为关键字参数传递,即aggregate(my_min=Min('price')),那么它将与参数同名,在这种情况下为my_min文档

于 2013-10-30T09:16:47.277 回答
2

对于 Min 和 Max,您可以订购您的值(QuerySet 结果)并获取 first() 和 last():

chocolate_list = Chocolate.objects.values_list('name', 'price')
min = chocolate_list.order_by('price').first()
max = chocolate_list.order_by('price').last()

PS:如果您没有分配任何内容,请删除 filter() 。使用 values_list() 您可以隐式实例化 QuerySet 类

于 2019-10-23T15:35:00.540 回答
0

@Maciej Gol 所说的用法:

from django.db.models import Min    

lowest_price = Chocolate.objects.values('price').aggregate(Min('price'))['price__min']
于 2022-02-24T09:12:02.387 回答