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

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

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

【问题讨论】:

    标签: django


    【解决方案1】:

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

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

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

    建议路线:

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

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

    3. 使用 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):
    

    就是这样。所有迁移工作

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-19
      • 2017-10-28
      • 1970-01-01
      • 2015-04-27
      • 1970-01-01
      • 2016-09-10
      • 2019-01-28
      • 2014-05-01
      相关资源
      最近更新 更多