2017-06-16 58 views
4

在我的Django應用程序中,特定的用戶輸入將導致創建新模型。這是我用來創建模型並註冊的代碼。Django:如何遷移運行時生成的動態模型

model = type(model_name, (ExistingModel,), attrs) 
admin.site.register(model, admin_options) 

from django.core.urlresolvers import clear_url_caches 
from django.utils.module_loading import import_module 
reload(import_module(settings.ROOT_URLCONF)) 
clear_url_caches() 

這成功地創建了新的模式,然而,當我在模型上點擊查看管理頁面在桌子上,我得到以下錯誤:

relation "ExistingModel_NewModel" does not exist

這通常意味着新模型更改尚未遷移。如何在Django中動態創建模型以查看其對應的數據表?

回答

4

一個簡單的解決方案爲我工作。在創建動態模型後,我最終運行了makemigrationsmigrate管理命令:

from django.core.management import call_command 
call_command('makemigrations') 
call_command('migrate') 
2

子流程可以使用migrate命令遷移模型。因此,嘗試這一點,將工作

import subprocess 
command = 'python manage.py migrate' 
proc = subprocess.Popen(command, stdin=subprocess.PIPE, stdout=subprocess.PIPE) 
stdout, stderr = proc.communicate(command) 

閱讀也是這個https://code.djangoproject.com/wiki/DynamicModels如果它可以幫助創建動態模型

+0

首先感謝您的好評!它表明你完全理解我的問題!所以我在重新加載url之後(註冊後)和重新加載之後添加了一次。在這兩種情況下,它仍然會出現相同的錯誤。我做錯了嗎? – cookiedough

+0

你檢查過stdout和stderr變量的輸出嗎? –