Size: a a a

Django [ru] #STAY HOME

2021 April 06

AD

Alex Dem in Django [ru] #STAY HOME
но вызывать из-под ViewSet, View и т.д.
источник

AD

Alex Dem in Django [ru] #STAY HOME
3) Сорри :)
источник

Н

Не выходи из комнаты... in Django [ru] #STAY HOME
Alex Dem
У меня в проекте каждый ViewSet имеет по 3-8 сериализаторов, поверь лучше сразу хранить по месту применения
+
источник

Р

Руслан in Django [ru] #STAY HOME
В плане, в методе get_queryset хранить все префетчи или селекты или где-то в сериализаторе? Как-то на просторах не замечал и не видел примеров
источник

AD

Alex Dem in Django [ru] #STAY HOME
Руслан
В плане, в методе get_queryset хранить все префетчи или селекты или где-то в сериализаторе? Как-то на просторах не замечал и не видел примеров
я сделал так:

1) У меня каждый сериализатор имеет метод get_fields_to_be_prefetched
Т.е. каждый сериализатор знает что ему нужно для эвойда N+1
источник

AD

Alex Dem in Django [ru] #STAY HOME
2) При nested сериализации сериализатор дергает одноименный метод у дочерних сериализаторов, попутно добавляя префикс поля
источник

AD

Alex Dem in Django [ru] #STAY HOME
3) Но инициализируется рекурсивная цепочка из под get_queryset, да
источник

AD

Alex Dem in Django [ru] #STAY HOME
Таким образом каждый сериализатор знает только о тех полях, которые ему нужны;
В случае nested сериализации, каскад из префетчей собирается на изи благодаря такой системе
источник

Р

Руслан in Django [ru] #STAY HOME
Интересно, а исходник такой системы есть?)
источник

AD

Alex Dem in Django [ru] #STAY HOME
Опять же, в проекте ModelVIewSet, у него 5 сериализаторов, в каждом из них степень вложенности достигается порой 5 уровней

user__company__ceo__car__factory
источник

AD

Alex Dem in Django [ru] #STAY HOME
Руслан
Интересно, а исходник такой системы есть?)
Nope, просто стандартизированный подход к разработке сериализаторов, + один миксин для сериализиторов, и один миксин для вьюсетов;
написанный потом и кровью на одном очень олдовом легаси напичканном N+1
источник

Р

Руслан in Django [ru] #STAY HOME
Интересно, поищу, посмотрю
источник

Р

Руслан in Django [ru] #STAY HOME
Тогда это говно с моделей убирать пойду
источник

Р

Руслан in Django [ru] #STAY HOME
Спасибо)
источник

AD

Alex Dem in Django [ru] #STAY HOME
Руслан
Интересно, поищу, посмотрю
а что искать?))

для начала просто пиши одноименный метод перечисляющий поля для префетча в сериализаторах
остальное потом достроится, додумается
источник

AD

Alex Dem in Django [ru] #STAY HOME
а чтобы не забывать писать, напиши абстрактный миксин
источник

AD

Alex Dem in Django [ru] #STAY HOME
PrefetchedFieldSerializer

@abstractmethod
def get_fields_to_be_prefetched(request) -> List[Union[Prefetch, list]]:
return []


def get_fields_to_be_prefetched(request):
return ['company', Prefetch(...)]
источник

Р

Руслан in Django [ru] #STAY HOME
С селектом также поступить?
источник

N

Nire in Django [ru] #STAY HOME
Alex Dem
PrefetchedFieldSerializer

@abstractmethod
def get_fields_to_be_prefetched(request) -> List[Union[Prefetch, list]]:
return []


def get_fields_to_be_prefetched(request):
return ['company', Prefetch(...)]
Почему не декоратор в данном случае?
источник

AD

Alex Dem in Django [ru] #STAY HOME
Руслан
С селектом также поступить?
+
источник