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