2015-06-01 3 views
3

У меня есть существующая база данных, с которой я пытаюсь получить доступ с помощью Django. Для создания моделей для базы данных я использовал python manage.py inspectdb. В настоящее время я могу импортировать модели в оболочку python, но когда я пытаюсь каким-либо образом получить доступ к любому из реальных объектов, я получаю эту ошибку OperationalError: (1054, "Unknown column 'some_table.id' in 'field list'"). Я вижу, что таблица в базе данных фактически не имеет поля id. Как я могу это исправить? Нужно ли обновлять поле в классе Meta и выполнить миграцию, чтобы оно могло автоматически создать это поле?Django автоматически создает первичные ключи для существующих таблиц базы данных

ответ

2

Из документации по Django: эта функция предназначена как ярлык, а не как окончательное поколение моделей. Для получения дополнительной информации см. Документацию об инспекции. (Ссылка: https://docs.djangoproject.com/en/1.8/howto/legacy-databases/)

Вам понадобится вручную очистить модели и выполнить миграцию. Линия вы должны добавить для добавления поля «ID» является:

id = models.IntegerField(primary_key=True) 

Предупреждение: Я бы определенно создать копию базы данных, чтобы играть с, а не оригинал. Вероятно, это приведет к некоторым пробным ошибкам и ошибкам. После того, как вы обязательно убедитесь, что у вас все получилось, вы можете изменить Managed=True, но будьте ОЧЕНЬ осторожны!

+0

Sweet! Благодарю. Поэтому я предполагаю, что если я определяю, должен ли существующее поле внутри таблицы быть основным ключом, я бы просто установил для атрибута primary_key значение true? –

+1

@ Hudson Worden Да, это правильно –

+1

Сообщите нам, если вам нужна дополнительная помощь, это может стать сложным (я сделал это только два раза сам), поэтому определенно будьте осторожны с исходными данными! Отметить ответ как правильный, когда у вас есть шанс? – FlipperPA