【问题标题】:Compare returned difference of fields with a variable in django queryset将返回的字段差异与 django 查询集中的变量进行比较
【发布时间】:2017-01-10 10:58:45
【问题描述】:

我试图根据字段值和变量的差异列出模型的所有对象。例如,我正在尝试提取自 3 天或更长时间以来创建的对象。所以我尝试如下查询模型

import datetime
from myapp_books.models import Book
from django.db.models import F

current_date = datetime.date.today()
books = Book.objects.annotate(day_difference=F('date_added__date') - current_date).filter(day_difference__gte=3)
books.count()

当我按如下方式在 shell 中运行时,这给了我一个错误

AttributeError: 'ExpressionNode' object has no attribute 'lookup'

请指教。我正在使用 django 1.5.12

【问题讨论】:

  • Django 1.5.12,但是为什么呢?
  • F 表达式仅来自 django 1.8+ methinks
  • @MosesKoledoye 升级它需要大量的代码审查,因此我们一直在使用相同的版本。需要尽快升级。
  • @e4c5 我可以毫无问题地导入 F
  • 哎呀对不起我的坏事

标签: python django django-queryset django-1.5


【解决方案1】:

我认为您根本不需要注释,您应该能够过滤超过 3 天的添加日期

Book.objects.filter(date_added__date__gte=datetime.now()-timedelta(days=3))

另外,您应该升级到受支持的 django 版本

【讨论】:

  • + 关于升级
猜你喜欢
  • 2021-09-13
  • 1970-01-01
  • 1970-01-01
  • 2018-05-01
  • 1970-01-01
  • 2015-11-19
  • 1970-01-01
  • 1970-01-01
  • 2020-12-27
相关资源
最近更新 更多