Должен ли первичный ключ id быть явно определен в моделях Django, сгенерированных из inspectdb для существующей базы данных? - PullRequest
2 голосов
/ 03 октября 2019

У меня есть база данных MySQL с несколькими таблицами, уже заполненными данными. Я создал и настроил проект Django с приложением. Связь между Django и базой данных работает как положено. Я сгенерировал файл models.py с помощью команды inspectdb для создания всех моих моделей приложений:

python manage.py inspectdb > myapp/models.py

Моя проблема заключается в том, что ни одна из моих моделей не отображает поле id в "models.py". ,Все существующие таблицы MySQL, имеющие в качестве первичного ключа столбец «id» (для них включено автоматическое увеличение), это кажется странным.

Интересно, нужно ли мне явно добавлять поля первичных ключей 'id' во все классы моделей, созданные с помощью inspectdb, или это не нужно (в этом случае это будет подразумеваться).

Почему первичный ключ 'id' отсутствует в определениях моделей Django и нужно ли добавить это поле в классы моделей?

Текущая настройка

  • Версия Python: 3.6.8
  • Версия Django: 2.2.5
  • mysqlclient: 1.4.4
  • sqlparse: 0.3.0

Ответы [ 2 ]

2 голосов
/ 03 октября 2019

Почему первичный ключ 'id' отсутствует в определениях моделей Django и нужно ли добавить это поле в классы моделей?

Нет . Если вы не указали первичный ключ в своих моделях. Django автоматически добавит AutoField к вашей модели с именем id, как указано в документации Автоматические поля первичного ключа :

По умолчанию Django предоставляет каждой модели следующее поле :

id = models.AutoField(primary_key=True)

Это первичный ключ с автоинкрементом.

Если выНапример, чтобы указать пользовательский первичный ключ, укажите primary_key=True в одном из ваших полей. Если Django увидит, что вы явно задали Field.primary_key, он не добавит автоматический столбец id.

0 голосов
/ 03 октября 2019

Я здесь с такой же ситуацией. Разница в том, что я мигрирую из базы данных mssql. Как уже упоминалось @williem, Django автоматически присваивает 'id'. Вы, скорее всего, получите ошибку программирования при использовании отношений ForeignKey, так как есть вероятность конфликта для первичного ключа. Это может оказаться полезным в этом случае: [ Столбец ошибки программирования Django не существует даже после выполнения миграций

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...