【问题标题】:django: exclude models from migrationsdjango:从迁移中排除模型
【发布时间】:2016-01-27 21:44:20
【问题描述】:

在我的 django 应用程序 (django 1.8) 中,我使用了两个数据库,一个是 MySQL 的“default”,另一个是无模式的只读数据库。 我有两个模型正在访问这个数据库,我想从数据和架构迁移中永久排除这两个模型:

  • makemigrations 永远不会检测到任何更改,并为它们创建迁移
  • migrate 永远不应抱怨该应用缺少迁移

到目前为止,我尝试了不同的方法,但都没有成功:

  • 在两个模型上都使用了managed=False Meta 选项
  • 向我的路由器添加了一个allow_migrate 方法,该方法为两种型号返回False

有没有人能举例说明如何实现这种情况? 感谢您的帮助!

【问题讨论】:

标签: python django django-models django-migrations


【解决方案1】:

到目前为止,我尝试了不同的方法,但都没有成功:

  • 在两个模型上都使用了 managed=False Meta 选项

该选项(模型元选项上的managed = False 属性)似乎满足要求。

如果不是,您需要扩展问题以准确说明 managed = False 无法胜任的模型的特别之处。

【讨论】:

    【解决方案2】:

    我想,我对 makemigrations 有疑问。它假装在managed = False模型上进行迁移,但没有为该模型生成SQL代码

    这是我的示例,模型 Smdocumets 非托管,并且没有生成任何 SQL 代码。

    python manage.py makemigrations

    Migrations for 'monitor':
      monitor\migrations\0005_auto_20171102_1125.py
        - Create model Smdocuments
        - Add field sid to db
        - Alter field name on db
    

    python manage.py sqlmigrate monitor 0005

    BEGIN;
    --
    -- Create model Smdocuments
    --
    --
    -- Add field sid to db
    --
    ALTER TABLE "monitor_db" RENAME TO "monitor_db__old"; 
    ...
    

    【讨论】:

      【解决方案3】:

      你有正确的解决方案:

      在两个模型上都使用了 managed=False Meta 选项

      它可能看起来不起作用,但当您在运行makemigrations 时看到- Create model xxx 对于具有managed = False 的模型时,您可能错误地抢占了最终结果。 您是如何检查/确认正在进行迁移的?

      makemigrations 仍将打印到终端 - Create model xxx 并在迁移文件中创建代码,但当您运行 migrate 时,这些迁移实际上不会产生任何 SQL 代码或出现在 Running migrations: 中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-06-02
        • 2017-12-31
        • 1970-01-01
        • 2020-08-17
        • 2016-10-08
        • 2020-09-10
        • 2022-06-17
        • 2019-06-02
        相关资源
        最近更新 更多