问题描述
我有DRF自定义过滤器,并且正在为NumericRange
建立查询。
我需要使用两个计算出的值创建NumericRange
(或其他整数范围),然后使用该字段使用__overlap
对其进行过滤。
def filter_range(queryset,name,value):
queryset = queryset.annotate(
number_range=ExpressionWrapper(
NumericRange(F(f"{name}_base"),F(f"{name}_base") + F(f"{name}_extend")),output_field=NumericRange(),),).filter(number_range__overlap=(value.start,value.stop))
使用此过滤器时,我得到:
'NumericRange' object has no attribute 'resolve_expression'
我认为也许我使用了错误的范围字段或其他东西,但是找不到更好的东西。
解决方案 我找到了解决方案,并且我刚刚将Func与Postgres documentation
中的NUMRANGE
一起使用
def filter_range(queryset,value):
queryset = queryset.annotate(
number_range=Func(
F(f"{name}_base"),F(f"{name}_base") + F(f"{name}_extend"),function="NUMRANGE",output_field=RangeField(),).filter(number_range__overlap=NumericRange(value.start,value.stop))
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)