реализовать в Django
в джанге нет смысла реализовывать, есть менеджер для этого
ты имеешь ввиду переопределять менеджер?
ну если нужно какое-то определенное поведение - да
а почему нет смысла это же хорошая практика прослойка между уровнем базы и приложением нет?
потому что 1 эта прослойка уже есть 2 к этой прослойке джанга сама обращается на прямую 3 смысл репозитория в том что ты убираешь зависимость приложения от реализации орм, а в джанге орм прибита гвоздями и ты все равно ни на что ее не поменяешь
я вот ща доку читаю увидел два способа переопределения тип можно оказ через переопределения класса Manager и через Queryset а в чем различие что то не понял?)
переопределяешь кверисет и подсовываешь его в модель с методом .as_manager()
это я понял а разница есть у них?
менеджер это то что дергается после Model.manager например User.objects, а кверисет это то что возвращает менеджер, если не правильно сделать, то у менеджера и кверисета будут разные методы и ты не сможешь сделать User.objects.custom_query_method(), а User.objects.all().custom_query_method() - сможешь)
понятно спасибо )
Только увидел) Вообще менеджер прикол какой то, когда можно просто использовать classmethod =D
Есть статья на хабре про hexagonal architecture на django, загугии. Там есть ссылка на проект, где он реализован
ты сам используешь эту архитектуру?
Да, начал делать по оьразу и подобию, всё укладывается по полочкам. https://habr.com/ru/post/559560/ там ссылка на гитлаб с проектом у чувака внутри статьи. Если что, пиши в лс.
А как ты собираешься классметод комбинировать с другими параметрами запроса, например тебе нужно сначала отфильтровать, а потом уже выполнить логику из твоего классметода? Менеджер дает тебе гибкость и единообразный интерфейс
Ну так принимаешь qs и отдаешь qs
А зачем тогда классметод, если ты уже принимаеь кверисет? Это уже просто функция
Я, конечно же, пробовал менеджеры, но в итоге ты расписываешь в х2-3 строк кода, что мог просто функцией написать но
И как это будет выглядеть в коде, с менеджером - Model.manager.filter(…).custom_method(…)
Ну так ты эту функцию просто помещаешь туда где ей место и где она не ломает интерфейс
Обсуждают сегодня