Как использовать выражение 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')
))