Найти - Пользователи
Полная версия: Взаимосвязь моделей в запросе. Оптимизация.
Начало » Django » Взаимосвязь моделей в запросе. Оптимизация.
1
MikaMika
Привет.
Есть три модели.
class A(models.Model):
    name = models.CharField()
class B(models.Model):
    a = models.ForeignKey(A)
    name = models.CharField()
class C(models.Model):
    a = models.ForeignKey(A, related_name='mya')
    day = models.IntegerField()

Делаю запрос во вьюхе:
q = B.objects.filter(name='blahblah').select_related('a')

В результате получаются объекты модели B и связанные с ними объекты модели A в одном запросе.
А как в этом же запросе, захватить объекты модели C которые связаны с A как многие к одному!
Можно сделать так:
q = B.objects.filter(name='blahblah').select_related('a', 'a.mya')
?
Или правильней даже так:
q = B.objects.filter(name='blahblah').select_related('a').prefetch_related('a.mya')
Используем prefetch_related() так как “a.mya” возвращает множество объектов.
lorien
А в чём вопрос, не понял. Ставьте, например, django debug toolbar и сами смотрите на количество и время выполнения SQL запросов.
MikaMika
lorien
А в чём вопрос, не понял. Ставьте, например, django debug toolbar и сами смотрите на количество и время выполнения SQL запросов.
Насчёт ddt это понятно, стоит уже.
Я запутался как правильно сделать запрос.
q = B.objects.filter(name='blahblah').select_related('a').prefetch_related('a.mya')
или
q = B.objects.filter(name='blahblah').select_related('a')
а потом вызывать в шаблоне:
q[0].a.mya.all()
или по другому?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB