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】:

我遇到了类似的问题,我必须在创建动态模型后运行makemigrationsmigrate 命令来修复它。尝试在创建模型后立即添加以下脚本:

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 模型在网页上获取动态数据?

基于 Django + Celery 的应用程序的动态(即运行时可配置)日志配置

MyEclipse做WEB项目时,修改Java不需要重启,创建一个新的Java类 却需要重启tomcat

Django Admin中的动态只读字段

Django:如何动态创建模型仅用于测试

如何为 django 模板中的标签创建动态 id