Django - 遗留数据库和 'id' 字段的问题

标签 django django-models django-database

我正在将 MySQL 数据库从 php 应用程序集成到新的 Django 项目中。 Inspectdb效果很好,我只需要将几个字段更改为外键,现在所有读取和编辑当前数据的功能都运行良好。

问题是当我尝试创建新条目时,收到错误“字段 'id' 没有默认值”。回溯从 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,当我发布有效表单时,我收到错误,但如果我返回数据列表,新项目就会显示!在我检查 shell 中的最新 id 值后,我可以看到它们正在正确递增。

但是对于 ModelOne(只有 id),错误仍然出现,并且 pk 变为 2147483647(最大值),并且由于重复的 id,后续保存失败。 (下一个最高pk只有62158)

我需要做什么才能使这些 id 字段正常工作?

<小时/>

更新:仍然没有解决这个问题。考虑转储数据并将其导入到新的 Django 构建的表中。仍在寻找解决此问题的方法。

<小时/>

更新2: 来自 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  |

最佳答案

在经历了一些复杂的南方迁移之后,我遇到了同样的问题。 我们希望避免重新加载数据库(转储/导入),幸运的是,这将帮助其他在搜索相同问题后遇到这篇文章的人。

我们找到了解决这个问题的解决方案,无需导出和导入数据库。

对于名为 auth_user 的表,以下 MySQL 命令将修复上述错误消息:

ALTER TABLE auth_user MODIFY `id` INT(11) NOT NULL AUTO_INCREMENT;

原始解决方案来自:

http://webit.ca/2012/01/field-id-doesnt-have-a-default-value/

关于Django - 遗留数据库和 'id' 字段的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7491118/

相关文章:

python - Django 使用 db_table 将表移动到其他应用程序,并且不删除原始表

python - 抽象 Django 模型中的 app_label

python - 自定义字段的 to_python 不工作? - Django

python - Django:如何在事务中包装批量更新/插入操作?

django - 将数据库列复制到 Django 中的另一个

python - 迭代 Django 模板中的模型不渲染任何东西

Django - 仅将字符串/用户输入的某些部分标记为安全?

mysql - Django - 对于在字典中传递的两个变量的循环

python - Django:排除一个表中在另一个表中具有链接的所有行

python - 有没有更优雅的方法在 Django 模型中添加值敏感的唯一一起约束?