Добавление поля автоинкремента к существующей модели с помощью Django South? - PullRequest
12 голосов
/ 13 января 2012

У меня есть проект Django, который начался как импорт устаревшей базы данных.Из-за этого существует модель с составным первичным ключом.Это работало до тех пор, пока я использовал только устаревшие данные, но теперь я хочу добавить новые данные, и созданная мной форма говорит мне, что я пытаюсь вставить дублирующиеся данные, предположительно, потому что он рассматривает только одно из полей какПервичный ключ.

Теперь я хочу изменить модель для использования первичного ключа с автоинкрементом, как один Django автоматически добавит.Я попытался удалить атрибуты первичного ключа из полей и поместить их в unique_together во внутренний класс Meta.Когда я запускал schemamigration с Югом, он хотел добавить поле id, как и ожидалось, но запрашивал значение по умолчанию.

Как я могу указать, что Юг должен назначать уникальные ключи некоторым способом, которыйразумно для автоинкрементного поля?(т.е. присвойте последовательность [1 ... n] некоторому произвольному порядку записей)

Если это невозможно, есть ли другой способ выполнить то же самое, предпочтительно используя Django и South?

1 Ответ

5 голосов
/ 20 января 2012

Я решил проблему, которая потребовала от меня сделать это с обходным путем:

Я скопировал данные из исходной таблицы во временную таблицу в SQL с помощью INSERT INTO... SELECT.... Затем я удалил исходную таблицу и заново создал ее с полем автоинкремента. Затем я скопировал данные обратно в новую таблицу со значениями автоинкремента, автоматически добавляемыми командой INSERT. Наконец, я выполнил фиктивный прогон миграции на юг, чтобы привести таблицы Юга в соответствие с новой схемой.

...