比较两个字段的 Django 过滤器
我该怎么在Django查询中比较两个字段呢?
简单来说,我想把任务分成两类:延迟的和按时的。
一个任务被认为是延迟的,当今天的日期和请求日期之间的差值超过了允许的天数。
现在我有了这个:
def dayssince(value):
if value is None:
return '0'
#"Returns number of days between today and value."
today = datetime.date.today()
diff = today - value
if diff.days > 1:
return '%s' % diff.days
elif diff.days == 1:
return '1'
elif diff.days == 0:
return '0'
else:
# Date is in the future; return formatted date.
return value.strftime("%B %d, %Y")
on_time = process.(Department__Tolerance__gte=dayssince(F('Request_date'))).annotate(Counter=Count('Client'))
delayed = process.(Department__Tolerance__lte=dayssince(F('Request_date'))).annotate(Counter=Count('Client'))
但是我遇到了一个属性错误:
'ExpressionNode'对象没有'days'这个属性1 个回答
0
F 表达式在 Python 中并不会返回可以使用的值,所以你的函数是在一个 SQL 表达式上被调用的,这就是出错的原因。F 表达式主要用来封装 数据库 操作。Python 根本看不到字段的值。
你可以在 F 表达式中使用许多其他操作:支持的 F 操作。特别是,你可以使用 Python 的 timedelta 对象来比较日期;具体可以查看 过滤器中的 F 表达式。