Перенос данных из поля JSON в отдельные поля

У меня есть класс DJango Model, в котором было решено хранить кучу данных в виде блоба. Причины такого решения мне не ясны... В любом случае, теперь передо мной стоит задача преобразовать это JSONField в отдельные поля модели. Мой вопрос в том, как мне создать пользовательскую миграцию DJango, которая извлечет данные из JSONField и перенесет их в новые поля?

Моя первая идея состоит в том, чтобы сделать миграцию, в которой я добавлю все новые поля, а затем вторую миграцию, которая будет сделана на заказ. В этой второй миграции я буду использовать django orm, чтобы пройти через каждый экземпляр моей модели и извлечь JSON данные, а затем пройтись по структуре полей и изменить вновь добавленные поля с JSON значениями. Единственная проблема, которую я вижу, это если поля имеют специальные константы, тогда будет довольно утомительно сделать все правильно.

Есть предложения по поводу моего подхода?

Я думаю, что описанный вами способ является правильным. Перенос данных из одной таблицы в другую - это всегда утомительная работа. Как вы и сказали, создайте нужные вам модели в одной миграции, затем напишите пользовательскую модель для сброса данных из вашей JSONfield в новые таблицы, а затем удалите поле.

Добавление проверки для "специальных ограничений" является ключевым моментом, поэтому вам может понадобиться несколько попыток. Если миграция не удалась, она просто вернется, поэтому, если вам нужно перевести ее в продакшн, а затем вы обнаружите неожиданную ошибку при второй миграции, убедитесь, что у вас есть логирование, проверьте логирование, скорректируйте миграцию и попробуйте снова.

Другой совет - убедитесь, что первая миграция (добавление новой таблицы) выполнена правильно, прежде чем создавать вторую.

Вернуться на верх