【问题标题】:How can i hook into django migrations for django 1.8我如何挂钩 django 1.8 的 django 迁移
【发布时间】:2015-06-23 05:54:32
【问题描述】:

我正在使用 django 1.8。

现在我需要添加一些基于权限的自定义字段,所以我从这样的 python 模型创建了一个 YML 文件

description:
    permissions: ['ADMIN']
award:
    permissions: ['USER']

它工作正常,但我的问题是如果有人更改字段名称或删除某些字段,那么我也需要在我的 yml 文件中反映这一点。

所以我在想,当用户运行迁移时,如果我能看到一些东西

  1. 如果字段被删除,那么我需要从 yml 文件中删除该条目
  2. 如果字段被重命名,那么我需要重命名它
  3. 如果添加了新字段,那么我需要为其添加空白行

我该怎么做

【问题讨论】:

    标签: python django migration


    【解决方案1】:

    创建迁移后,您可以手动将基本迁移类更改为您的自定义子类,并重写 apply 方法

    from django.db import migrations
    
    class MyBaseMigration(migrations.Migration):
        def apply(self, project_state, schema_editor, collect_sql=False):
            for operation in self.operations:
                """
                Examine operation classes here and provide end-user notes
                """
             return super(MyBaseMigration, self).apply(project_state, schema_editor, collect_sql=collect_sql)
    

    【讨论】:

    • 没搞懂怎么用。我想要一些自动的东西。您所说的是手动更改迁移文件。如果我必须手动执行,那么最好直接更改 yml。
    • post migrate 没有关于迁移操作的信息。如果是自动通知,您为什么要询问有关迁移运行的通知?创建迁移文件时您可能需要通知吗?
    • 我认为你是对的。创建迁移文件时我需要通知。有没有办法做到这一点
    • 在这种情况下,您可以继承createmigration 命令,并覆盖write_migration_files 方法。只需将自定义管理命令放入yourapp/management/commands/createmigration.pygithub.com/django/django/blob/master/django/core/management/…
    猜你喜欢
    • 2015-09-08
    • 2015-11-24
    • 2015-11-12
    • 2015-06-16
    • 1970-01-01
    • 2021-03-24
    • 2017-04-06
    • 1970-01-01
    • 2018-01-14
    相关资源
    最近更新 更多