Size: a a a

Django [ru] #STAY HOME

2020 August 20

DB

Dima Boger in Django [ru] #STAY HOME
маленькие фильтры вроде бы странно выносить в функции — что функцию вызвать, что фильтр

но в конце концов это позволяет потом быстро рефакторить, т.к. на самом деле все эти фильтры, аннотации и другая магия это такое отражение атомарных кусков бизнес-логики, и они обычно меняются все вместе
источник

O

Olex in Django [ru] #STAY HOME
Ну звучит неплохо. Это что-то похожее на filters либу джанговую
источник

M

Maksimgeolog in Django [ru] #STAY HOME
Dima Boger
Если у тебя фильтр в отдельном методе, то его несложно найти и несложно дописать в него ещё логику — она выполнится везде. Из минусов, чтобы это работало нормально, нужно бить себя по рукам за любые фильтры 🤷‍♂️
А потом у тебя раздувается репозиторий потому что на каждый чих свой фильтр.🙂 Нужно аккуратнее их планировать
источник

DB

Dima Boger in Django [ru] #STAY HOME
Maksimgeolog
А потом у тебя раздувается репозиторий потому что на каждый чих свой фильтр.🙂 Нужно аккуратнее их планировать
Да, конечно, у любой концепции есть минусы
источник

A

Andrey in Django [ru] #STAY HOME
Maksimgeolog
А потом у тебя раздувается репозиторий потому что на каждый чих свой фильтр.🙂 Нужно аккуратнее их планировать
лучше дутый репо, чем дутые контролеры
источник

DB

Dima Boger in Django [ru] #STAY HOME
Ну и в итоге это выглядит как-то так

class CustomQuerySet(...):
   def filter_by_budget(budget_pk: int):
       return self.filter(budget__pk=budget_pk)

...

Order.objects.filter_by_budget(kwargs['pk'])
источник

M

Maksimgeolog in Django [ru] #STAY HOME
Andrey
лучше дутый репо, чем дутые контролеры
И то не айс и это не йса
источник

DB

Dima Boger in Django [ru] #STAY HOME
Ещё из очевидных минусов, это то что не получится спрятать всё за кастомные фильтры, джанга сама под капотом делает много всякого, и тот же drf / django_filters динамически фильтрует от души
источник

DB

Dima Boger in Django [ru] #STAY HOME
Это может приводить к двойной работе, вроде бы всё за фильтры спрятал, а всё равно править в двух местах)
источник

DB

Dima Boger in Django [ru] #STAY HOME
Но чейнинг фильтров киллер-фича, всем рекомендую попробовать
источник

M

Maksimgeolog in Django [ru] #STAY HOME
Dima Boger
Ну и в итоге это выглядит как-то так

class CustomQuerySet(...):
   def filter_by_budget(budget_pk: int):
       return self.filter(budget__pk=budget_pk)

...

Order.objects.filter_by_budget(kwargs['pk'])
Кстати не одобряю кастомные кварисеты. При сложных выборках легко нарваться на кросс импорт. По этому лучше отдельный класс под это дело.
источник

DB

Dima Boger in Django [ru] #STAY HOME
Maksimgeolog
Кстати не одобряю кастомные кварисеты. При сложных выборках легко нарваться на кросс импорт. По этому лучше отдельный класс под это дело.
Кросс-импорт? Отдельный класс?
источник

A

Andrey in Django [ru] #STAY HOME
Maksimgeolog
Кстати не одобряю кастомные кварисеты. При сложных выборках легко нарваться на кросс импорт. По этому лучше отдельный класс под это дело.
каким образом кросс импорт?
источник

DB

Dima Boger in Django [ru] #STAY HOME
Без кастомных кверисетов пропадёт вся магия чейнинга ✨
источник

tn

tot samiy neizvestni... in Django [ru] #STAY HOME
Maksimgeolog
Кстати не одобряю кастомные кварисеты. При сложных выборках легко нарваться на кросс импорт. По этому лучше отдельный класс под это дело.
Что?
источник

M

Maksimgeolog in Django [ru] #STAY HOME
В кварисете модели А тебе нужна модель Б, а в модели Б ты имеешь форигн кей на модель А. В результате ты нарвешься на кросс импорт ибо модель А будет импортить кастомный кверисет, кастомнй квкрисет будет импортить модель Б, модель Б будет пытаться импортить моедль А. Даже форигн кей если писать стройкой ты рано или поздно на это нарвешься ибо одному кверисету нужна модель А а другому модель Б.
источник

M

Maksimgeolog in Django [ru] #STAY HOME
Либо в кастомном кверисете модели А нужен подзапрос из модели Б и наоборот. Я думаю моя мысль понятна. Я гарывалс на это.
источник

M

Maksimgeolog in Django [ru] #STAY HOME
Даже если брать всякие сллистые архитектуры всякие энтити находятся ниже уровнем чем их репозитории, а в джанге наоборот.
источник

AG

Artem Gubatenko in Django [ru] #STAY HOME
Maksimgeolog
Либо в кастомном кверисете модели А нужен подзапрос из модели Б и наоборот. Я думаю моя мысль понятна. Я гарывалс на это.
чтоб избежать эту проблему, можно использовать django.apps.apps.
Не так красиво, но работает)
источник

D

Dk in Django [ru] #STAY HOME
Andrey
дорого
Как ты это посмотрел?
источник