【发布时间】:2017-01-21 15:18:54
【问题描述】:
我有一个包含许多内容块的页面模型。
class Page(models.Model):
...
class Block(models.Model):
page = models.ForeignKey(Page)
...
Block 有一些其他属性可以确定它是否被认为是“活动的”(几个布尔值和一个日期时间字段)。我有一个Block 模型的经理,这样我就可以获得活动块列表
Block.objects.active()
Page.objects.first().block_set.active()
我希望能够编写一个查询集以仅返回具有活动块的 Page 对象。我想使用现有的Block 活动管理器来执行此操作,因此我只定义一次“活动”块(DRY)的原因。 IE 类似:
Page.objects.annotate(count=Count('block__active')).filter(count__gt=0)
显然这不起作用,因为active 不是Block 的属性。有没有办法可以使用现有的Block 经理来实现这一点?
【问题讨论】:
-
计算
active()所需的所有数据是否都存储在数据库中?因为当它存在时,您可以使用该逻辑来构建注释。
标签: python django django-queryset