Size: a a a

Django [ru] #STAY HOME

2019 April 29

AG

Alexander Greckov in Django [ru] #STAY HOME
не подойдет, т.к там по back relation
источник

AL

Alexander Lebedev in Django [ru] #STAY HOME
Alexander Greckov
Например instance.some_back_rel.last(), и именно этот вызов я хочу оптимизировать, т.к вызовов метода с этим много
данные у модели по back relation часто меняются? пробовали что-то типа cached_property?
источник

AG

Alexander Greckov in Django [ru] #STAY HOME
могут часто меняться
источник

TD

Timur Daukaev in Django [ru] #STAY HOME
Alexander Greckov
не подойдет, т.к там по back relation
Я не помню точно, но вроде prefetch_related работает и в таком случае, нет?
источник

AG

Alexander Greckov in Django [ru] #STAY HOME
Насколько я знаю по дефолту он кеширует для all. Для filter, order_by можно при создании Prefetch object а для last я хз
источник

AL

Alexander Lebedev in Django [ru] #STAY HOME
Alexander Greckov
Есть модель, на неё много моделей ссылкается через foreignkey. У первой модели (на которую ссылаются по foreignkey) есть метод, который через back relation достает last object. В моем случае есть апишка (djangorestframework) с кучей обьектов первой модели и там происходит вызов этого метода для каждого обьекта
а этот метод надо вызывать в list view?
источник

AL

Alexander Lebedev in Django [ru] #STAY HOME
если да, можно сделать prefetch в get_queryset
источник

AL

Alexander Lebedev in Django [ru] #STAY HOME
может сработать
источник

AG

Alexander Greckov in Django [ru] #STAY HOME
Рендерится APIListView и в сериализаторе вызывается для каждого объекта этот метод.
источник

AG

Alexander Greckov in Django [ru] #STAY HOME
last же вроде отдельный запрос фигачит, даже если сделать prefetch_related(‘some_back_rel’)
источник

AL

Alexander Lebedev in Django [ru] #STAY HOME
вы правы. на вскидку, кроме кеширования значения свойства ничего в голову не лезет
источник

AG

Alexander Greckov in Django [ru] #STAY HOME
Ок, тогда попробую и так. Спасибо!
источник

AL

Alexander Lebedev in Django [ru] #STAY HOME
Alexander Greckov
last же вроде отдельный запрос фигачит, даже если сделать prefetch_related(‘some_back_rel’)
хотя это тоже стоит проверить. вы debug_toolbar используете?
источник

AG

Alexander Greckov in Django [ru] #STAY HOME
да
источник

AG

Alexander Greckov in Django [ru] #STAY HOME
с префетчем отдельный еще запрос появляется
источник

AL

Alexander Lebedev in Django [ru] #STAY HOME
а если использовать only() после select_related и объявить поле другой модели как поле сериализатора?
источник

AG

Alexander Greckov in Django [ru] #STAY HOME
так select_related работает вроде бы только для foreign_key
источник

AG

Alexander Greckov in Django [ru] #STAY HOME
ну и onetoone
источник

AL

Alexander Lebedev in Django [ru] #STAY HOME
а, там же last нужен, не сработает
источник

AL

Alexander Lebedev in Django [ru] #STAY HOME
пардон
источник