Django Prefetch и prefetch_related не работают для обратного внешнего ключа

У меня есть следующие модели, для которых, несмотря на использование Prefetch и prefetch_related, выполняется sql. Я пытаюсь получить адрес любого из ClientBranchDetails, соответствующего despatch_branch модели Folio.

from django.db import models

class Client(models.Model):
    name = models.CharField(max_length=50)
    
class ClientBranch(models.Model):
    client = models.ForeignKey('Client', on_delete=models.CASCADE)

class ClientBranchDetails(models.Model):
    client_branch = models.ForeignKey('ClientBranch', on_delete=models.CASCADE, related_name='all_client_branch_details')
    sap_code = models.CharField(max_length=20, unique=True)
    address = models.CharField(max_length=100)

class Folio(models.Model):
    folio_nbr = models.PositiveIntegerField(unique=True)
    client_branch = models.ForeignKey('ClientBranch', on_delete=models.CASCADE, related_name='client_branch')
    despatch_branch = models.ForeignKey('ClientBranch', on_delete=models.CASCADE, related_name='despatch_branch')

Код выглядит следующим образом

client_branch_and_details=ClientBranch.objects.prefetch_related('all_client_branch_details')
folios=Folio.objects.all().prefetch_related(Prefetch('despatch_branch', queryset=client_branch_and_details, to_attr='branch_details'))
f=folios[0]
f.despatch_branch.id
f.branch_details

3-я строка выше запускает SQL-запрос, как и ожидалось, но 4-я и 5-я строки тоже, и это не то, чего я ожидал.

Вернуться на верх