首页 > 解决方案 > 在django中查询(获取)RangeField的上限

问题描述

我想通过 django 查询集获取 RangeField 的上限。

当您可以访问 python 对象时,就my_model.size_range.upper可以了。不在查询引擎内部,不使用F, When, Case...

class MyModel(models.Model):
    size_range = IntergerRangeField()

MyModel.objects.all().annotate(new_upper=F('size_range__upper') + 1)
FieldError: Unsupported lookup 'upper' for IntegerRangeField or join on the field not permitted.

任何想法 ?

标签: pythondjangopostgresqldjango-modelspsycopg2

解决方案


我找到了一个半解决方案:

from django.db.models.functions import Upper

MyModel.objects.all().annotate(
      upper=Upper('size_range')
  ).annotate(
      new_upper=F('upper') + 1
  )

感觉很笨拙,但至少它很有效

如果有人知道更好?我确信可以直接查询原始值。


推荐阅读