Django 3.2更新AutoField为BigAutoField向后兼容外键关系

May*_*aya 9 python mysql django

将项目从 Django 2.2 更新到 Django 3.2 后,我遇到了问题。

在 Django 2.2 中,主键是使用AutoFieldMySql 中的含义创建的,它们被考虑int(11),并且该表中的所有外键也必须是int(11).

在 Django 3.2 中,现在创建主键,BigAutoField在 MySql 中创建 type bigint(20)。因此,我无法与旧表创建任何外键关系。

根据文档,可以使用以下方法在设置中更改:

DEFAULT_AUTO_FIELD = 'django.db.models.AutoField'
Run Code Online (Sandbox Code Playgroud)

这在创建主键时有效,int(11)但是,仍然创建外键字段,这bigint(20)意味着无法创建关系,因为它们必须具有相同的类型。

这里说您可以将所有现有表更改为,BigAutoField但这也不会处理外键关系。

有什么方法可以轻松地将所有主键及其关系更改为不同类型吗?我是否在 Django 文档中遗漏了一些内容,其中它们还提供了相关键和主键的兼容性?

BigAutoField如果 Django 的所有未来版本现在都使用它作为默认值,我显然更愿意更改所有现有数据。

Paw*_*ryc 0

您会考虑直接通过MySQL控制台更新旧数据库吗?之后,您可以将这个“旧(更新)”数据库添加到您的项目中。