比较两个字段django filter

Gus*_*yes 5 python django compare filter

如何比较django查询中的两个字段?

基本上我想要的是将任务延迟和on_time分成两个查询.

当今天和请求日期之间的差异超出容忍天数时,任务会延迟.

现在我有这个:

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'))
Run Code Online (Sandbox Code Playgroud)

但我得到属性错误: 'ExpressionNode'对象没有属性'days'

小智 0

F 表达式不会返回要在 Python 中使用的值,因此您的函数是在 SQL 表达式上调用的,因此会出现错误。它们用于封装数据库操作。Python 永远看不到字段值。

您可以在 F 表达式中使用许多其他运算:F 支持的运算。特别是,您可以使用Python timedelta 对象来比较日期;请参阅Filters 中的 F 表达式

  • 如果它是一个日期而不是一个 timedelta 对象,我怀疑这实际上可以完成(我的错)。[此](http://stackoverflow.com/questions/12457119/how-can-i-use-the-f-object-to-do-this-with-the-django-orm)建议相同;您需要使用整数存储日期时间。 (2认同)