【发布时间】:2017-09-22 07:13:17
【问题描述】:
我正在使用自定义预取对象来仅获取一些相关对象,例如:
unreleased_prefetch = Prefetch("chants", Chant.objects.with_audio())
teams = Team.objects.public().prefetch_related(unreleased_prefetch)
这很好用,但我也想知道这些对象的数量并按这些进行过滤。我很高兴我现在可以使用查询集作为预取对象的参数(因为我大量使用自定义查询集/管理器)。
有没有办法可以重用这个查询,我通过条件注释以相同的方式传递给 Prefetch 对象?
到目前为止,我的条件注释非常难看,看起来像这样(它与我原来的圣歌 with_audio 自定义查询/过滤器做同样的事情):
.annotate(
unreleased_count=Count(Case(
When(chants__has_audio_versions=True, chants__has_audio=True, chants__flag_reject=False,
chants__active=False, then=1),
output_field=IntegerField()))
).filter(unreleased_count__gt=0)
它可以工作,但是很丑陋并且有重复的逻辑。 有没有办法将查询集传递给When我可以将它传递给预取以避免重复?
【问题讨论】: