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

Ush*_*her 6 django prefetch django-queryset

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

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

Class Bid(models.Model):
    project = models.ForeignKey(Project, related_name='bids')
Run Code Online (Sandbox Code Playgroud)

当我们查询项目时,我们想要预取项目的投标。

Project.objects.filter(whatever condition).prefetch_related(
     Prefetch('bids', queryset=Bid.objects.all())
)
Run Code Online (Sandbox Code Playgroud)

这里我们只想获取属于过滤项目的投标,而不是所有投标,我们如何指定呢?我期待类似的事情

queryset=Bid.objects.filter(project=project?)... 
Run Code Online (Sandbox Code Playgroud)

谢谢。

Ala*_*air 7

Project.objects.filter(whatever condition).prefetch_related(\n     Prefetch('bids', queryset=Bid.objects.all())\n)\n
Run Code Online (Sandbox Code Playgroud)\n\n

这看起来不错。Django 将只为您获取相关出价。请注意,在这种情况下您不需要\xe2\x80\x99 Prefetch。你可以这样做:

\n\n
Project.objects.filter(whatever condition).prefetch_related('bids')\n
Run Code Online (Sandbox Code Playgroud)\n\n

如果您想过滤查询集,这Prefetch很有用,例如:

\n\n
Project.objects.filter(whatever condition).prefetch_related(\n     Prefetch('winning_bids', queryset=Bid.objects.filter(status='WINNING'))\n)\n
Run Code Online (Sandbox Code Playgroud)\n