使用 django 迁移,如何更改 auth_permission 字段长度?

Posted

技术标签:

【中文标题】使用 django 迁移,如何更改 auth_permission 字段长度?【英文标题】:Using django migrations, how do I alter auth_permission field length? 【发布时间】:2015-06-09 14:39:19 【问题描述】:

我刚刚升级到 Django 1.7,我的一些迁移遇到了一些问题。在升级之前,我使用 South 来处理数据迁移,其中一个迁移是更改 auth_permissions 中 name 字段的字段长度。

如何使用 django migrations >= 1.7 编写相同的迁移?

【问题讨论】:

【参考方案1】:

还需要这种改变吗?该字段的长度长期以来一直是一个已知问题,但错误跟踪器中的最新更新显示它是quintupled in length。

如果您仍然希望它更长,您可能想要this。

编辑:暂时放弃。编写存储在应用程序 A 中但应用于应用程序 B 的迁移涉及比我有时间更深的猴子。

建议路线:

    在您自己的一个应用程序中的迁移中使用 RunSQL 手动调整字段。

    Fork Django 1.7.8,添加 cmets 中描述的身份验证迁移,针对该 github 存储库进行 pip 安装。

    使用 Django 1.8,其中this change is standard。

【讨论】:

不确定这是否包含在 1.7.8 版本中。无论如何,我不知道如何使用数据迁移来修改 auth_permissions 模型。 也许像 this 这样的东西有一个 max_length 变化? 由于 auth_permission 在不同的应用程序中,我不能使用它。它无法找到合适的模型。 在一个作为概念证明的玩具项目中,我能够使其与 python manage.py makemigrations --empty auth 一起制作文件和 these 内容。我仍在尝试在更易于维护的地方编写迁移,但它涉及overriding some inside logic。 啊,这很可能是我需要做的。早上会检查。干杯!【参考方案2】:

权限名称长度有问题 使用 Django 1.8 Python 3.4.4 (这些是 mysql 5.6+ 使用的最新版本) 改变了 base\schema.py

在 _alter_field(...) 中

# ********* altered - start
fragment, other_actions = self._alter_column_type_sql(table=model._meta.db_table, old_field=old_field, new_field=new_field.column, new_type=new_type)
# ******** end

将定义更改为:

def _alter_column_type_sql(self, table, old_column, column, type):

就是这样。所有迁移工作

【讨论】:

以上是关于使用 django 迁移,如何更改 auth_permission 字段长度?的主要内容,如果未能解决你的问题,请参考以下文章

Django 迁移使用 RunPython 提交更改

Django 迁移使用 RunPython 提交更改

如何在 django 中更改模型时填充数据库字段

django 手写迁移更改身份验证

Django迁移更改目录结构后未检测到更改

Django 迁移未检测到所有更改