2017-06-16 60 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变量的输出吗? –