是否可以执行聚合函数Django
's RangeField
?
假设我们有 3 个对象BigIntegerField
price_range
.
第一个对象:price_range = [10,5000]
第二个目标:price_range = [1,5000]
第三个目标:price_range = [100,9000]
的结果Max
and Min
这三个对象的聚合将是:
min = 1
and max = 9000
我正在尝试聚合Max
and Min
这边走:
MyModel.objects.aggregate(Min('price_range'),Max('price_range'),)
这会引发错误:
编程错误:函数 min(int8range) 不存在第 1 行:
选择 MIN("app_mymodel"."price_range") AS "price_range__min" FROM "app...
您可以通过以下方式获得范围界限Upper(..)
and Lower(..)
so:
from django.db.models.functions import Upper, Lower
MyModel.objects.aggregate(
Min(Lower('price_range')),
Max(Upper('price_range'))
)
但请注意,如果范围不重叠(例如[0, 20]
and [50, 100]
),你仍然会得到一个范围[0, 100]
.
显然现代版本的 Django 需要将字段命名为@EricTheise 说:
from django.db.models.functions import Upper, Lower
MyModel.objects.aggregate(
low=Min(Lower('price_range')),
high=Max(Upper('price_range'))
)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)