Django模型 - django会缓存以前的查询吗?

时间:2009-08-26 06:26:17

标签: django caching django-models

下面我在authorw5模型对象中调用相同的方法。但其中一个引发了一个错误:

>>> author = models.Author('ali')
>>> author.article_set.count()
---------------------------------------------
ValueError: invalid literal for int() with base 10: 'ali'

>>> w5 = models.Author(name='w5')
>>> w5.article_set.count()
0

实际上,在这些行之前,我之前有一个错误的Author类定义。我首先使用ValueError的前一个定义从作者对​​象中获取Author。然后我更改了Author类并重新加载了模块。

使用Chad Braun-Duin编写的reloadmodels.py重新加载模型后,w5等新实例化对象正常工作。但是像author这样的重新实例化的对象会引发错误。

这是由于django的查询缓存逻辑还是reloadmodels.py引起的矛盾行为?有什么想法吗?

...谢谢

2 个答案:

答案 0 :(得分:1)

这与Django无关,它是一个Python的东西。在链接的问题中,Chad正在导入这样的模型:

import myapp.models as mymodels

使用此语法,您可以在磁盘上更改类时使用reload()刷新类定义。但是,导入这样的模型更为标准:

from myapp.models import MyModel

如果你这样做 - 大多数人都这样做 - reload()就没有效果,即使是Chad的黑客也是如此。

真的,退出Python shell并重新启动它更简单 - 特别是如果你使用django-extensions中的shell_plus,它会在启动时自动将模型加载到shell中。

答案 1 :(得分:0)

如果更改django中的模型定义,则需要将更改重新应用于数据库。如果您可以手动删除表,则可以使用manage.py syncdb

还原结构

您可以使用manage.py sql命令检查django用于匹配新模型类的SQL定义,并手动编辑表以适应,如果您不想丢失表。