如何在 Django 中基于父查询集创建预取查询集

How to create Prefetch queryset based on parent queryset in django

这是场景,一个包含多个投标的项目模型。

Class Project(models.Model):
    user = models.ForeignKey()

Class Bid(models.Model):
    project = models.ForeignKey(Project, related_name='bids')

当我们查询项目时,我们想要预取项目的出价。

Project.objects.filter(whatever condition).prefetch_related(
     Prefetch('bids', queryset=Bid.objects.all())
)

这里我们只想获取属于过滤项目的出价,而不是所有的出价,如何指定?我期待

queryset=Bid.objects.filter(project=project?)... 

谢谢。

Project.objects.filter(whatever condition).prefetch_related(
     Prefetch('bids', queryset=Bid.objects.all())
)

这看起来不错。 Django 只会负责为您获取相关的出价。请注意,在这种情况下您不需要 Prefetch。你可以这样做:

Project.objects.filter(whatever condition).prefetch_related('bids')

如果要过滤查询集,Prefetch 很有用,例如:

Project.objects.filter(whatever condition).prefetch_related(
     Prefetch('winning_bids', queryset=Bid.objects.filter(status='WINNING'))
)