Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Django
  • » Взаимосвязь моделей в запросе. Оптимизация. [RSS Feed]

#1 Март 27, 2013 11:47:36

MikaMika
Зарегистрирован: 2012-11-07
Сообщения: 51
Репутация: +  0  -
Профиль   Отправить e-mail  

Взаимосвязь моделей в запросе. Оптимизация.

Привет.
Есть три модели.

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” возвращает множество объектов.

Отредактировано MikaMika (Март 27, 2013 11:52:46)

Офлайн

#2 Март 28, 2013 01:01:34

lorien
От:
Зарегистрирован: 2006-08-20
Сообщения: 755
Репутация: +  37  -
Профиль  

Взаимосвязь моделей в запросе. Оптимизация.

А в чём вопрос, не понял. Ставьте, например, django debug toolbar и сами смотрите на количество и время выполнения SQL запросов.

Офлайн

#3 Март 28, 2013 07:24:41

MikaMika
Зарегистрирован: 2012-11-07
Сообщения: 51
Репутация: +  0  -
Профиль   Отправить e-mail  

Взаимосвязь моделей в запросе. Оптимизация.

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()
или по другому?

Офлайн

  • Начало
  • » Django
  • » Взаимосвязь моделей в запросе. Оптимизация.[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version