Я считаю, что лучше придерживаться любых имеющихся у меня приборов в соответствии с текущей версией кода.Таким образом, при создании миграции 0003 вы выполняете миграцию данных и новый dumpdata
, заменяя фиксатор 0002. Когда вы создаете миграцию данных, убедитесь, что вы делаете и вперёд, и назад, таким образом вы закончитес правильными данными при миграции обратно на 0002.
Когда вы выполняете миграцию данных, убедитесь, что вы получаете доступ ко всем моделям через объект orm
, в противном случае вы получите ошибки, схожие с тем, что вы уже сделали.опыт работы.
Если вы по какой-то причине хотите запустить код django со старыми данными (версия 0002), то ваши модели должны соответствовать вашей базе данных.Это будет означать проверку соответствующей версии кода, используя любую версию кода, которую вы используете (git, hg, svn ...).Если вы пытаетесь решить проблему «вовремя», вы, вероятно, тоже захотите выполнить ответвление в этой точке.
См. Также комментарии к документации South по поводу приборов
Вотидея, вдохновленная этой ссылкой выше: «Лучше всего написать новую миграцию для загрузки прибора».Как насчет загрузки вашего прибора (который у вас уже есть) из миграции, а не loaddata
.Вам все равно нужно создать миграцию данных и использовать объект orm
для ручной загрузки данных.Вы можете использовать функции сериализации django , это именно то, что loaddata
делает .
В отношении того, почему loaddata
использует версию модели, а неверсия базы данных: loaddata
- это команда управления django , которая не знает, что делает Юг.Из-за этого он должен оставаться независимым от базы данных и использовать ORM django.Вы всегда можете написать свою собственную команду управления , если вам нужно сделать что-то более конкретное - возможно, вытащить некоторые из версий orm юга или сделать специфичные для базы данных loaddata, которые считывают схему непосредственно из базы данных.Я думаю, что решение в предыдущем параграфе будет намного меньше работы.