from django.db.models import Max
# Find the maximum value of the rating and then get the record with that rating.
# Notice the double underscores in rating__max
max_rating = App.objects.aggregate(Max('rating'))['rating__max']
return App.objects.get(rating=max_rating)
from django.db.models import Max, Value
from django.db.models.functions import Coalesce
max_rating = SomeModel.objects.aggregate(
max_rating=Coalesce(Max('rating'), Value(0))
)['max_rating']
from django.db.models import Max
# Find the maximum value of the rating and then get the record with that rating.
# Notice the double underscores in rating__max
max_rating = App.objects.aggregate(Max('rating'))['rating__max']
return App.objects.filter(rating=max_rating).first()
7条答案
按热度按时间jc3wubiy1#
请参见this。您的代码将类似于以下内容:
您还可以在现有查询集上使用此功能:
如果您需要包含这个max值的模型示例,那么您发布的代码可能是最好的方法:
注意如果查询集是空的,也就是说没有参数匹配查询(因为
[0]
部分将引发IndexError
),那么这将是错误的。如果你想避免这种行为,而只是在这种情况下返回None
,那么使用.first()
:4c8rllxm2#
Django还有一个函数“latest(field_name = None)”,可以找到最新的(max. value)条目,它不仅可以处理日期字段,还可以处理字符串和整数。
您可以在调用该函数时给予字段名称:
或者你可以在你的模型 meta数据中给予这个字段命名:
现在您可以不带任何参数调用'latest()':
nfs0ujit3#
我已经在我的项目中测试过了,它可以在O(n)时间内找到最大值/最小值:
这保证了您可以高效地获得最大元素之一,而不是对整个表进行排序并获得顶部(大约O(n*logn))。
vpfxa7rd4#
焊料01:
焊料02:
fdx2calv5#
如果您还想在表为空的情况下获得
None
以外的值(例如0),请将Max
与Coalesce组合:xvw2m8pv6#
如果你想要一个随机的评论,也许可以改进@afahim关于@Raydel米兰达评论的回答。如果你想要所有评论,那么只使用过滤器
gg0vcinb7#
也许这能帮到CBV的人