Как использовать выражение Django F() в `update` для JSONField

У меня есть около 12 миллионов записей, которые мне нужно обновить в моей базе данных postgres (поэтому мне нужно сделать это эффективным способом). Я использую Django.

Мне нужно обновить столбец jsonfield (extra_info), чтобы использовать значения из другого столбца (related_type_id, который является целым числом) в той же модели.

Пытаюсь сделать это с помощью update. Это кажется наиболее эффективным способом. Пример:

Person.objects.all().update(extra_info={
  "type": "Human",
  "id": F('related_type_id')
})

Выдает ошибку: "Объект типа F не является JSON сериализуемым". Я думал, что F() вернет значение этого столбца (которое должно быть целым числом), которое должно быть сериализуемым. Можно ли это сделать? Или я пытаюсь сделать это неправильным способом. Я не хочу выполнять итерацию в цикле for и обновлять каждую запись с помощью save(), потому что это займет слишком много времени. Здесь слишком много записей

Функция базы данных Django JSONObject должна работать, она возвращает правильный JSON объект из пар ключ-значение и может быть передана Fобъектам

from django.db.models import F, Value
from django.db.models.functions import JSONObject

Person.objects.all().update(extra_info=JSONObject(
  type=Value('Human'),
  id=F('related_type_id')
))
Вернуться на верх