Django在运行时创建动态模型,需要重启服务器才能反映,为啥?
Posted
技术标签:
【中文标题】Django在运行时创建动态模型,需要重启服务器才能反映,为啥?【英文标题】:Django creating dynamic model on Run-time, need to restart the server to reflect it, why?Django在运行时创建动态模型,需要重启服务器才能反映,为什么? 【发布时间】:2017-10-11 16:45:13 【问题描述】:我通过引用此链接 https://code.djangoproject.com/wiki/DynamicModels 创建动态模型,由此我可以在运行时创建表到数据库。
并且可以通过以下命令查看创建的表
python manage.py inspectdb test1
它以 django models.py 格式返回,
到下一步,我正在尝试通过以下命令将此创建的表带到应用程序的 models.py 文件中
python manage.py inspectdb test1 > app/models.py
然后 mdoels.py 我得到一些类似的东西
class Test1(models.Model):
first_name = models.CharField(max_lengtgh=255)
last_name = models.CharField(max_lengtgh=255)
然后我将这些模型渲染到 forms.py 中
from models import Test1
class Test1Form(forms.ModelForm):
class Meta:
model = Test1
然后将此表单调用到views.py,并将其作为输入表单呈现给模板。
views.py
from forms import Test1Form
def myveiw(request, template_name="mytemplate.html"):
args =
form = Test1Form()
args['form'] = form
return TemplateResponse(request, template_name, args)
mytemplate.html
<form method="post">% csrf_token %
form
<button type="submit">Submit</button>
</form>
这里的一切在运行时都运行良好,但是每次我都需要重新启动 django 服务器才能看到模板中的表单,为什么?重新启动后,我可以在模板中看到表单。
为什么它需要重新启动,你们能帮我解决这个问题吗,我的方法是正确的还是需要改变我的方法?请让我知道这对我来说会非常充实。提前致谢。
【问题讨论】:
你的视图函数在哪里? 【参考方案1】:我遇到了类似的问题,我必须在创建动态模型后运行makemigrations
和migrate
命令来修复它。尝试在创建模型后立即添加以下脚本:
from django.core.urlresolvers import clear_url_caches
from django.utils.module_loading import import_module
from django.core.management import call_command
admin.site.register(model, admin_opts)
reload(import_module(settings.ROOT_URLCONF))
clear_url_caches()
call_command('makemigrations')
call_command('migrate')
【讨论】:
感谢您的回复。让我解决这个问题,然后让你回来。 @AjayKumar 运气好吗?以上是关于Django在运行时创建动态模型,需要重启服务器才能反映,为啥?的主要内容,如果未能解决你的问题,请参考以下文章
基于 Django + Celery 的应用程序的动态(即运行时可配置)日志配置