j_s*_*syk 5 django django-models django-database
我正在将一个来自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 = ...
Run Code Online (Sandbox Code Playgroud)
对于ModelTwo,当我发布一个有效的表单时,我收到了错误,但是如果我回到我的数据列表,则会出现新项目!在我检查了idshell中的最新值之后,我可以看到它们正在递增.
但对于ModelOne(仅使用id),错误仍会显示,并且pk变为2147483647(最大值),后续保存因重复ID而失败.(下一个最高PK只有62158)
我需要做些什么才能使这些id字段正常工作?
更新:仍然没有运气解决这个问题.考虑转储数据并将其导入到新建的Django表中.仍在寻找这个问题的解决方案.
update2:来自db shell的信息
ModelOne:
+-------------+--------------+-------+------+---------+-----------------+
| Field | Type | Null | Key | Default | Extra |
| id | int(11) | NO | PRI | NULL | auto_increment |
Run Code Online (Sandbox Code Playgroud)
ModelTwo:
+-------------+--------------+-------+------+---------+-----------------+
| Field | Type | Null | Key | Default | Extra |
| named_pk | int(11) | NO | PRI | NULL | auto_increment |
Run Code Online (Sandbox Code Playgroud)
在一些复杂的南迁移之后我遇到了同样的问题.我们想避免重新加载数据库(转储/导入),幸运的是,它会帮助其他人在搜索同一问题后落在这个帖子上.
我们找到了解决此问题的解决方案,无需导出和导入数据库.
对于名为auth_user的表,以下MySQL命令将修复上面的错误消息:
ALTER TABLE auth_user MODIFY `id` INT(11) NOT NULL AUTO_INCREMENT;
Run Code Online (Sandbox Code Playgroud)
原始解决方案:
http://webit.ca/2012/01/field-id-doesnt-have-a-default-value/
我最终从原始数据库导出数据,并将其加载到由我的模型/项目生成的新数据库中。
我认为我对我正在处理的原始数据库的副本尝试了太多的事情,并且搞砸了 pk 字段的底层 SQL。
我很高兴我只处理一个副本。
| 归档时间: |
|
| 查看次数: |
2600 次 |
| 最近记录: |