Рассмотрим простые отношения ForeignKey:
class A(Model):
pass
class B(Model):
a = ForeignKey(A)
У меня есть представление API, которое создает A и набор B на основе внешних данных (данные НЕ передаются от пользователя), затем сериализует созданные объекты и возвращает сериализованные данные. Мой код создания объекта выглядит примерно так:
a = A()
a.b_set.bulk_create(B(a=a) for b in [...])
Моя проблема в том, что это не добавляет объекты B в b_set a, поэтому, если бы я должен был запустить
print(a.b_set.all())
после этого он снова запросит БД для получения b_set. Это не нужно, хотя, потому что у меня уже есть весь b_set, как я только что создал его. Я делаю это с рядом вложенных объектов, так что это приводит к большому количеству ненужных запросов. Мой текущий обходной путь - после создания выполнить запрос вроде
A.objects.prefetch_related('b_set').get(a=a.id)
затем сериализатор, который выбрал объект. Это ограничивает сериализацию только одним ненужным запросом, но я бы тоже хотел исключить этот. Мне кажется, что должен быть способ кэширования созданных объектов B на и
Любая необходимость снова ударить БД во время сериализации.