Django:如何迁移在运行时制作的动态模型

时间:2017-06-16 16:04:03

标签: python 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()

这成功创建了新模型,但是,当我单击模型以查看管理页面上的表时,我收到以下错误:

  

关系“ExistingModel_NewModel”不存在

这通常意味着尚未迁移新模型更改。如何在Django中迁移动态创建的模型以查看相应的数据表?

2 个答案:

答案 0 :(得分:11)

一个简单的解决方案对我有用。在创建动态模型后,我最终运行了makemigrationsmigrate管理命令:

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

答案 1 :(得分:2)

Subprocess可以使用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如果它可以帮助创建动态模型