我在應用程序中創建了一些動態Django模型,除遷移系統外,一切似乎都按預期工作。Django 1.7 - makemigrations爲非託管模型創建遷移
如果我創建一個動態Django模型並設置managed = False,Django的makemigrations
命令仍然會爲該新模型生成一個遷移。遷移看起來是這樣的:
class Migration(migrations.Migration):
dependencies = [
('atom', '0001_initial'),
]
operations = [
migrations.CreateModel(
name='books',
fields=[
],
options={
'db_table': 'books',
'managed': False,
},
bases=(models.Model,),
),
]
如果我沒有創建遷移,當我運行python manage.py migrate
,我看到以下消息(在大的嚇人的紅色字母):
Your models have changes that are not yet reflected in a migration, and so won't be applied.
Run 'manage.py makemigrations' to make new migrations, and then re-run 'manage.py migrate' to apply them.
是有沒有辦法告訴Django 1.7中的遷移系統忽略非託管模型?或者在模型的Meta類中設置了migrations = False
?
更新:澄清,我使用的方法創建我相似的人的動態模型描述在以下地方:
- http://dynamic-models.readthedocs.org/en/latest/topics/model.html#topics-model
- https://code.djangoproject.com/wiki/DynamicModels
這方法非常適合基於存儲在我的配置模型(https://code.djangoproject.com/wiki/DynamicModels#Adatabase-drivenapproach)中的信息生成我的動態模型。我確實需要註冊一個信號來清除django模型緩存,以便在更改配置實例時捕獲對模型的更改,但似乎一切正常,除了爲這些模型生成遷移。如果我刪除其中一個配置並從Django的緩存中刪除模型,則需要再次更新遷移,刪除它不應該關心的模型。
這些動態模型沒有專門用於應用程序。沒有在代碼中的哪個地方指的是書籍模型(來自上面的例子)。它們在運行時生成,用於從他們提供訪問的舊錶中讀取信息。
但是,遷移實際上是否導致問題?也就是說,當你運行'migrate'時,是否會錯誤地在數據庫中創建模型?如果沒有,那真的沒有問題。遷移系統不僅關注數據庫級別的更改,還會盡可能準確地創建內存模型的圖像。 – 2014-10-28 18:45:10
這是正確的。遷移不會造成問題。但是,在動態系統中,始終存在潛在的新模型。如果我可以向遷移系統表明它不需要擔心這些特定模型,那將會很好。 – chadgh 2014-10-28 19:32:22
您能否向我們提供有關您的動態模型如何生成的更多細節?主要需要哪些數據來動態生成它們。 – 2014-11-05 15:52:21