prefetch_related cache с настраиваемым обратным менеджером

У меня есть что-то похожее на следующую настройку: -

from django.contrib.sites.models import Site
from django.contrib.sites.managers import CurrentSiteManager
from django.db import models


class A(models.Model):
    pass


class B(models.Model):
    a = models.ForeignKey(A)


class C(models.Model):
    site = models.ForeignKey(Site)
    a = models.ForeignKey(A, related_name='cs')

    objects = models.Manager()
    on_site = CurrentSiteManager()

Если я использую prefetch_related для извлечения всех Cs, связанных с конкретным экземпляром B, он выбирает все Cs, независимо от того, Сайт. Fine

Затем я хочу использовать пользовательский менеджер on_site, чтобы получить только Cs, которые находятся на текущем сайте, но объекты были кэшированы внутри Django (я думаю), и поэтому он возвращает их

>>> a=A.objects.create()
>>> B.objects.create(a=a)
>>> s1=Site.objects.create(domain='site1.com')
>>> s2=Site.objects.create(domain='site2.com')
>>> C.objects.create(site=s1, a=a)
>>> C.objects.create(site=s2, a=a)
>>> b = B.objects.prefetch_related('a__cs__site').last()
>>> for c in b.a.cs(manager='on_site').all():
        print c.site
site1.com
site2.com

Я знаю, что могу фильтровать вручную по сайту в этом конкретном случае, но в фактическом коде я не хочу, чтобы " знать ", что мне нужно сделать этот дополнительный фильтр при использовании настраиваемого реверсивного менеджера, как это, только потому, что я уже сделал prefetch_related ранее.

Является ли это ошибкой в ​​Django? Должен ли он очистить кеш prefetch_related, когда я впоследствии использую пользовательский менеджер? Или я сделал что-то не так?

0
задан 13 August 2018 в 15:02

0 ответов

Другие вопросы по тегам:

Похожие вопросы: