Size: a a a

Django [ru] #STAY HOME

2020 June 08

EM

Eri Meilis in Django [ru] #STAY HOME
У меня вьюз для формы вот такой:
from django.http import JsonResponse
from django.views import View
from django.views.generic.edit import CreateView
from .models import Email,  SphereSubmit
from .utils import template_email_message
from .mixins import AjaxableResponseMixin

class SphereSubmitCreate(AjaxableResponseMixin, CreateView):
   model = SphereSubmit
   fields = ['name', 'phone', 'message']

   email_template = 'feedback/send-mail/sphere.html'
   email_res = Email.objects.values_list('title', flat=True)
   email_subject = 'блабла'
источник

MB

Murad B in Django [ru] #STAY HOME
большое спасибо, выручил)))
источник

AD

Alex Dem in Django [ru] #STAY HOME
Объясние пожалуйста дурачку, как понять когда использовать select_related(),а когда prefetch_related()?
источник

DT

Dan Tyan in Django [ru] #STAY HOME
select_related добавит join в твой sql запрос
и!! соответственно может выбрать только одну запись
источник

DT

Dan Tyan in Django [ru] #STAY HOME
те если ты вытаскиваешь посты и которого FK на юзера

то select_related('user') - намана
источник

DT

Dan Tyan in Django [ru] #STAY HOME
когда распечатываешь список из 10 записей и выводишь в том числе имя автора например
без select_related у тебя будет 11 запросов

с select_related будет 1 запрос но с join-ом
источник

AD

Alex Dem in Django [ru] #STAY HOME
у меня сложный modelviewset и серилазайзер к нему, который на get list формирует 2к запросов (такое наследие вот досталось)
в этом сериализаторе очень много объвяленных полей которые делают всякие фильтрации по FK
источник

DT

Dan Tyan in Django [ru] #STAY HOME
я вон на прошлой неделе с 5k до 66 скинул =)
источник

AD

Alex Dem in Django [ru] #STAY HOME
и вот думаю, что мне лучше с ними сделать
насколько я понял, select_related делает SQL join, а prefetch_related все выгребает из таблиц и в памяти строит отношения
источник

AD

Alex Dem in Django [ru] #STAY HOME
но я мог понять неправильно
источник

DT

Dan Tyan in Django [ru] #STAY HOME
prefetch_related

работает по другому

он собирает id-шники и выполняет запрос с where id in
источник

AD

Alex Dem in Django [ru] #STAY HOME
Dan Tyan
я вон на прошлой неделе с 5k до 66 скинул =)
ух...
а сколько запрос выполнялся? :))
источник

DT

Dan Tyan in Django [ru] #STAY HOME
те при prefetch_related
при тех же выводе  10 записей
будет 2 запроса
источник

DT

Dan Tyan in Django [ru] #STAY HOME
но оба по теории быстрых так как вытаскиыват без join и по первичному ключу
источник

DT

Dan Tyan in Django [ru] #STAY HOME
уктуально когда например у тебя из 10 записей всего 2-3 автора
источник

DT

Dan Tyan in Django [ru] #STAY HOME
или допустим вытаскиваешь теги
источник

AD

Alex Dem in Django [ru] #STAY HOME
Dan Tyan
prefetch_related

работает по другому

он собирает id-шники и выполняет запрос с where id in
звучит так словно в большинстве случаев select_related должен работать потенциально быстрее
источник

AD

Alex Dem in Django [ru] #STAY HOME
Dan Tyan
или допустим вытаскиваешь теги
спасибо большое за ответы!
источник

DT

Dan Tyan in Django [ru] #STAY HOME
Alex Dem
звучит так словно в большинстве случаев select_related должен работать потенциально быстрее
не всегда
источник

DT

Dan Tyan in Django [ru] #STAY HOME
я как правило предпочитаю prefetch
но замеры не делал
источник