【问题标题】:Annotating django QuerySet with values from related table使用相关表中的值注释 django QuerySet
【发布时间】:2011-04-18 12:34:43
【问题描述】:

我有一个模型 Page,其中包含 2 个相关模型 PageScoreHistory 和 PageImageHistory,其中两个历史模型都有 page 字段作为 Page 的 ForeignKey 并有一个 date 字段。我遇到的问题是,当我获得 PageImageHistory QuerySet 列表时,我希望能够检索页面在拍摄图像时的分数。对于一个单独的 PageImageHistory 对象,我可以很容易地做到这一点:

pih = PageImageHistory.objects.get(id=123)
score = pih.page.pagescorehistory_set.filter(datetime__lte=pih.captured).latest('datetime')

但是对于 QuerySet,我想避免对集合的每个成员运行查询。有没有办法做到这一点是一种理智的方式,而无需实际循环遍历集合的所有成员?

【问题讨论】:

标签: django django-models


【解决方案1】:

没有看到你的模型很难,但这能达到你想要的吗?

PageImageHistory.objects.filter(
    page__pagescorehistory__datetime__lte=x.captured
).annotate(Max('page__pagescorehistory__datetime')

【讨论】:

  • 很抱歉给您带来了困惑。粘贴代码时我离开了 x 。不,这不是我想要的。我已经有一组我想要的 PageImageHistory 对象,我不需要过滤它。但只需执行 annotate(Max('page__pagescorehistory__datetime') 将从所有分数历史记录中选择最近的日期时间,我需要图像日期之前的最新分数。
  • 否 - 它将选择 x.captured 之前的最大 pagescorehistory 日期(无论是什么),这就是您所要求的。有关说明,请参阅 this bit of the docs
猜你喜欢
  • 1970-01-01
  • 2016-01-07
  • 1970-01-01
  • 2018-06-13
  • 2011-11-10
  • 2016-09-07
  • 1970-01-01
  • 2018-12-30
  • 2019-01-22
相关资源
最近更新 更多