我正在将一个 php 应用程序中的 MySQL 数据库集成到一个新的 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
shell 中的最新值之后,我可以看到它们正在正确递增。
但是对于 ModelOne(只有id
),错误仍然出现,并且 pk 变为 2147483647(最大值)并且由于重复的 id,后续保存失败。(下一个最高的pk只有62158)
我需要做什么才能使这些 id 字段正常工作?
更新:解决这个问题仍然没有运气。考虑转储数据并将其导入到新的 Django 构建的表中。仍在寻找解决此问题的方法。
update2:来自 db shell 的信息
型号一:
+-------------+--------------+-------+------+---------+-----------------+
| Field | Type | Null | Key | Default | Extra |
| id | int(11) | NO | PRI | NULL | auto_increment |
模型二:
+-------------+--------------+-------+------+---------+-----------------+
| Field | Type | Null | Key | Default | Extra |
| named_pk | int(11) | NO | PRI | NULL | auto_increment |