如何在交互式会话中重新加载Django模型而不丢失本地变量?

4
我正在使用交互式shell和Django应用程序(shell_plus)进行一些研究,以存储数据并使用方便的管理界面进行浏览。
偶尔我会添加或更改一些应用程序模型,并运行syncdb (或更改模型时的South迁移)。即使重新导入应用程序模型,模型的更改也不会在我的交互式会话中生效。因此,我被迫重新启动shell_plus,并在此过程中失去了珍贵的locals()。
有没有办法在会话期间重新加载模型? 谢谢!
1个回答

1

您可以使用此片段来重建AppCache。如果有任何*.pyc文件,请不要忘记使用类似以下命令删除它们:

find . -name "*.pyc" -exec rm {} \;

否则,reload() 将忽略您在 models.py 文件中所做的更改。

我删除了*.pyc文件并运行了代码片段 - 我看到当我运行代码片段时,models.pyc会立即被创建(此时不会创建任何其他pyc文件),但是模型仍然没有更新。(尝试访问新添加的字段时出现AttributeError)有任何想法是什么出了问题? - GJ.
我尝试使用ipython shell。在运行代码片段后,您是否重新导入了模型类? - Reto Aebersold
是的,我试过了,但仍然无法访问新属性。 - GJ.
我是这样做的:向模型添加新字段 -> 运行syncdb -> 清除pyc文件 -> 运行代码片段 -> 重新导入更新后的模型 -> 创建模型的新实例 -> 访问新添加的字段。也许您可以安装ipython并重试。我认为您需要创建更新后模型的新实例。 - Reto Aebersold

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接