django:从迁移中排除模型

时间:2015-10-28 07:53:51

标签: python django django-models django-migrations

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

  • makemigrations永远不应检测到任何更改,并为其创建迁移
  • migrate永远不应抱怨错过该应用的迁移

到目前为止,我尝试了不同的事情,但都没有取得任何成功:

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

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

3 个答案:

答案 0 :(得分:1)

  

到目前为止,我尝试了不同的事情,但都没有取得任何成功:

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

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

如果没有,您需要扩展问题,准确说明managed = False无法完成工作的模型的特殊内容。

答案 1 :(得分:1)

我想,我的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"; 
...

答案 2 :(得分:0)

您有正确的解决方案:

<块引用>

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

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

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