想象一下我有两个模型A
和B
,它们被(宽松地)定义为
class A(models.Model):
a_flag = models.BooleanField()
class B(models.Model):
b_flag = models.BooleanField()
a = models.ForeignKey('A', ...)
我希望有一个A
的查询集,其中有a_flag=True
,对于这些查询,我想进一步查询a.b.filter(...)
并用{{ 1}}。是否可以在不重新定义b_flag=True
的RelatedManager的情况下做到这一点(仍然看起来像是个棘手的解决方案)?
UPD:外键反过来
答案 0 :(得分:3)
您可以使用Prefetch
-object [Django-doc](不要与.prefetch_related(..)
调用混淆)并在此时进行一些过滤。
例如:
A.objects.filter(
a_flag=True
).prefetch_related(
Prefetch('b_set', queryset=B.objects.filter(b_flag=True), to_attr='b_pos')
)
因此,现在QuerySet
将包含A
的集合,这些集合的属性b_pos
包含相关的B
对象,但带有b_flag=True
因此,假设给定的B
对象有三个相关的A
,但是只有两个具有b_flag=True
,则b_pos
将包含这两个。
我真的建议不要本身以b_set
为目标,因为如果您将A
对象传递给方法,则该方法将假定b_set
只是提供所有实际的B
。