менеджер не должен знать про связанные поля?
полагаю, что менеджер должен обслуживать только ту модель, для которой создан. по крайней мере я бы не стал в него совать ничего лишнего
Я хочу написать метод, где буду ссылаться на mtm поле, но почему-то подумал что менеджер не должен знать про связи
Так напиши функцию просто для получения нужной инфы, зачем менеджер для этого делать. Менеджер используется для удобного получения определенных объектов модели по параметрам, которые используются очень часто. Префетчить связанные объекты - плохая идея, имхо
Почему плохая идея? Удобное получение объектов по параметрам это разве не фильтрация?
фильтрация. так ты в менеджере фильтрацию и задаешь. можно, конечно, префетчить прямо в менеджере, но я бы префетчил явно каждый раз, когда это необходимо
Понял тебя :) Спасибо
префетчи склонны жрать память, согласен с оратором выше - стоит их юзать по месту использования - это первый момент второй момент - по контексту вопроса могу предположить, что речь о каком-то queryset с связанными таблицами - если так, то в принципе для таких вещей нужно писать логику в Queryset объекте, не в model manager model manager, IMO, должен хранить логику и методы на уровне инстанса модели, всякие хитровыдуманные методы создания/удаления инстанса, или списка инстансов обслуживаемой модели(какой-нибудь свой bulk_create с казино и куртизанками)
Да как раз таки использую QuerySet в связке с менеджером, имеется кастомное создание инстанса в менеджере, все фильтры и получение данных описаны в QuerySet, в менеджере просто создаю методы для вызова фильтраций кверисета
если есть какая-то сложная БЛ, лучше действительно создать отдельный скриптик my_awesome_business_logic, пихнуть туда функцию, а в ModelManager просто создать метод-обёртку над этой функцией модели лучше сразу держать в стерильной чистоте :)
Обсуждают сегодня