Добавление поля Autoincrement к существующей модели с Django South?
У меня есть проект Django, который запускается как импорт устаревшей базы данных. Из-за этого существует модель с составным первичным ключом. Это работало до тех пор, пока я использовал только устаревшие данные, но теперь хочу добавить новые данные, и форма, которую я создал, говорит мне, что я пытаюсь вставить повторяющиеся данные, по-видимому, потому, что она смотрит только на одно из полей, поскольку первичный ключ.
Теперь я хочу изменить модель, чтобы использовать первичный ключ автоинкремента, например, один Django будет автоматически добавлять. Я попытался удалить атрибуты первичного ключа из полей и поместить их в unique_together в класс Meta. Когда я запустил schemamigration
с Югом, он хотел добавить поле id
, как и ожидалось, но запросил значение по умолчанию.
Как я могу указать, что Юг должен каким-то образом назначить уникальные ключи, которые являются разумными для поля автоинкремента? (т.е. назначить последовательность [1... n] произвольному упорядочению записей)
Если это невозможно, есть ли другой способ выполнить одно и то же, предпочтительно используя Django и South?
Ответы
Ответ 1
Я решил проблему, которая потребовала от меня сделать это с помощью обходного пути:
Я скопировал данные из исходной таблицы во временную таблицу в SQL с помощью INSERT INTO... SELECT...
. Затем я удалил исходную таблицу и воссоздал ее с полем автоинкремента. Затем я скопировал данные обратно в новую таблицу, при этом значения автоинкремента автоматически добавляются командой INSERT
. Наконец, я выполнил поддельный прогон миграции South, чтобы таблицы South соответствовали новой схеме.