问题描述
我正在尝试创建动态模型,并尝试以编程方式迁移它,并将模型注册到管理站点。我无法破解迁移API,但能够运行管理(makemigrations和migration命令)。我能够做到。但是,当我在管理员中注册模型时,它显示为灰色,因此我必须重新启动服务器才能启用它。我无法以编程方式重新启动服务器。我正在使用Django 3.0.3。这里有帮助吗?
model = type(m.get("name"),(models.Model,),m.get("attrs"))
我正在通过编程方式启用此处的模型列表中的模型
def migrate():
from django.core import management
from django.db.migrations.recorder import MigrationRecorder
db_name = "programaticfetchfromdatabase"
app_label = "programaticfetchfromdatabase"
try:
management.call_command("startapp",app_label)
management.call_command("makemigrations",app_label)
management.call_command("migrate",app_label,MigrationRecorder.Migration.objects.filter(
app=app_label).last().__dict__.get("name"),"--database=="+db_name)
return True
except:
# raise Exception("Unable to perform migration)
return False
if migrate():
from django.contrib import admin
# If register and dont restart the model is grayed out
admin.site.register(model)
# so restarting server here
# restart server (WHICH API do I use here)
from django.utils import autoreload
autoreload.restart_with_reloader()
# I get port already in use error
我想知道为什么在动态管理员注册后该模型显示为灰色,或者我想以编程方式重新加载django服务器
解决方法
是
"--databe="+db_name
不是
"--database=="+db_name
是
try:
...
except:
...
不是
try:
...
catch:
...
最重要的是,您不想使用django runserver在生产网站上运行服务器。
也许可以从django-mutant那里获得启发,以启发您尝试做的事情,但我仍然不建议使用动态模型。