是否有可能执行聚合功能Django的RangeField?
Django
RangeField
假设我们有3个对象BigIntegerField price_range。
BigIntegerField
price_range
第一个目标: price_range = [10,5000]
price_range = [10,5000]
第二个obj: price_range = [1,5000]
price_range = [1,5000]
第3个目标: price_range = [100,9000]
price_range = [100,9000]
这三个对象的结果Max和Min汇总将是:
Max
Min
min = 1 和 max = 9000
min = 1
max = 9000
我试图聚集Max和Min这种方式:
MyModel.objects.aggregate(Min('price_range'),Max('price_range'),)
这引起了错误:
ProgrammingError:函数min(int8range)不存在第1行:SELECT MIN(“ app_mymodel”。“ price_range”)AS“ price_range__min” FROM“ app …
您可以获取与域范围Upper(..)和Lower(..)这样:
Upper(..)
Lower(..)
from django.db.models.functions import **Upper, Lower** MyModel.objects.aggregate(Min( **Lower(** 'price_range' **)** ), Max( **Upper(** 'price_range' **)** ))
但是请注意,如果范围不重叠(例如[0, 20]和[50, 100]),您仍然会得到range [0, 100]。
[0, 20]
[50, 100]
[0, 100]
from django.db.models.functions import Upper, Lower MyModel.objects.aggregate( **low=** Min(Lower('price_range')), **high=** Max(Upper('price_range')) )