修改后的inspectdb后,我想在加载web上的索引页面时运行它。所以,在我的view.py-def索引中,我试着做下一个:
def index(request):
subprocess.Popen("rm /path/app/models.py", shell=True)
subprocess.Popen("python2.7 /path/manage.py inspectdb_New > /path/app/models.py", shell=True)
return render_to_response('index/index.html', context_instance = RequestContext(request))
这不起作用。我尝试使用os.system,subprocess.call,但它仍然无法正常工作。 对我来说,至少看起来我不能在执行时修改models.py,但我不知道可能是什么问题......
任何想法的人?
感谢。
答案 0 :(得分:1)
在Web服务器运行时,您无法更改models.py,因为模型(和其他python代码)仅在服务器启动时加载。
答案 1 :(得分:1)
您有两个问题: a)你希望shell在调用视图函数时执行某些操作。我已经发出警报。 b)你想加载新模型。它不会发生。您必须重新加载才能加载新代码(模型内省等)。可能你使用runserver命令,看看Django自动加载器代码:https://github.com/django/django/blob/master/django/utils/autoreload.py
它跟踪gen_filenames()列出的文件,并在更改内容时重新加载。未列出您的模型,因此不会反映对代码的更改。
我会触摸某些内容或删除.pyc文件以强制重新加载。