我想通过django queryset获取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)
个字符
你知道吗?
3条答案
按热度按时间rqenqsqc1#
我找到了一个半解:
字符串
这感觉很笨拙,但至少它工作
如果有人知道更好?我相信可以直接查询原始值。
ejk8hzay2#
你想用它做什么?你可以用
endswith
字符串
pgpifvop3#
使用django,你可以注册custom lookup。
字符串
但是,您不能直接在
RangeField
或IntegerRangeField
上注册Upper
,因为默认情况下,loopup使用与output_field
相同的字段(例如:您想要的类型不是IntegerRangeField
,而是IntegerField
)。output_field
必须显式。IntegerRangeField
与Upper
的自定义查找如下所示:型
由于在所有类型的范围字段上具有这一点可能是有用的,并且对于具有查找的范围字段手动注册所有排列将是非常重复的,因此该过程可以被推广。
这段代码使用
base_field
作为output_field
,基于原始代码创建新的查找类,并将它们注册到字段中。型
此外,
__lower
和__upper
现在可以像这样用于过滤:型