在我的django应用程序(django 1.8)中,我使用两个数据库,一个是default
',它是MySQL,另一个是无模式的只读数据库。
我有两个模型正在访问这个数据库,我想永久地从数据和模式迁移中排除这两个模型:
makemigrations
永远不应检测到任何更改,并为其创建迁移migrate
永远不应抱怨错过该应用的迁移到目前为止,我尝试了不同的事情,但都没有取得任何成功:
managed=False
元选项allow_migrate
方法,该方法为两个模型False
有没有人举例说明如何实现这种情况? 谢谢你的帮助!
答案 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:
中}}。