Скажем, в аннотации мы попросили просуммировать какое-то поле таблицы по всем записям - откуда джанге знать, какие записи в этой таблице лежат и чему у них равно это поле? Поэтому сначала добавляем в таблицу запись, а уже после просим базу посчитать нужные нам значения по актуальным данным.
Если же у вас никаких агрегатных функций не используется, а значение можно получить исходя из самого экземпляра модели, то создайте в модели свойство (property), которое будет проводить вычисление, и не напрягайте базу без надобности.
В некоторых случаях можно скомбинировать, храня в разделяемой потоками памяти актуальные агрегатные значения и вычисляя при каждой записи в базу, и выбирать их через свойство модели. Но нужно позаботиться о первичной инициализации после запуска.
Мне казалось, что нужно как раз не создавать проперти на модели без надобности, и стараться все перекладывать на базу. В моем случае нужно посчитать количество связных объектов и не хочется делать это на каждый объект из всего кверисета. (понятное дело, что запрос на list эндпоинт модели не выгребает все 1кк записей, слава богу есть пагинация. но даже, если размер страницы 100, на каждый элемент в питоне делать математику с доп запросами к базе - плохая затея кмк)
Обсуждают сегодня