Я интегрирую базу данных MySQL из приложения php в новый проект Django. Inspectdb работал хорошо, мне просто нужно было изменить пару полей на ForeignKeys, и теперь все чтение и редактирование текущих данных работает отлично.
Проблема в том, что когда я пытаюсь создать новую запись, я получаю сообщение об ошибке "Field 'id' doesn't have a default value"
. Трассировка начинается с вызова form.save()
, а исключение исходит от курсора MySQL. В большинстве случаев столбец имеет имя id
, но в одном случае это именованное значение:
class ModelOne(models.Model): #normal "id" named pk
id = models.AutoField(primary_key=True, db_column='id', default=None)
other_fields = ...
class ModelTwo(models.Model): #specific pk
named_pk = models.AutoField(primary_key=True, db_column='named_pk',
default=None)
other_fields = ...
Для ModelTwo, когда я размещаю правильную форму, я получаю сообщение об ошибке, но затем, если я возвращаюсь к своему списку данных, появляется новый элемент! И после того, как я проверил последние значения id
в оболочке, я вижу, что они правильно увеличиваются.
Но для ModelOne (с id
) ошибка все еще появляется, и pk становится 2147483647 (макс.), И последующие сохранения завершаются ошибкой из-за дублирования идентификаторов. (следующий самый высокий pk - только 62158)
Что мне нужно сделать, чтобы эти поля идентификаторов работали правильно?
обновление: все еще не повезло, исправляя это Думая о выгрузке данных и импорте их в свежие, построенные Django таблицы. Все еще ищу решение этой проблемы.
Update2:
Информация от db shell
ModelOne:
+-------------+--------------+-------+------+---------+-----------------+
| Field | Type | Null | Key | Default | Extra |
| id | int(11) | NO | PRI | NULL | auto_increment |
ModelTwo:
+-------------+--------------+-------+------+---------+-----------------+
| Field | Type | Null | Key | Default | Extra |
| named_pk | int(11) | NO | PRI | NULL | auto_increment |