代码之家  ›  专栏  ›  技术社区  ›  Mert Nuhoglu

Django模型-Django是否缓存以前的查询?

  •  0
  • Mert Nuhoglu  · 技术社区  · 16 年前

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

    >>> 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 从作者对象开始,首先用以前的定义 作者 . 然后我改变了 作者 类并重新加载模块。

    重新加载模型后, reloadmodels.py 由Chad Braun Duin编写,新实例化的对象 W5 工作正常。但是重新定义的对象 作者 提出错误。

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

    谢谢。。。

    2 回复  |  直到 16 年前
        1
  •  1
  •   Daniel Roseman    16 年前

    这与Django无关,这是一个python的东西。在相关问题中,乍得进口的模型如下:

    import myapp.models as mymodels
    

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

    from myapp.models import MyModel
    

    如果你这样做了,而且大多数人都这样做了,那么reload()就没有任何效果,即使有了chad的黑客。

    实际上,退出python shell并重新启动它更简单,尤其是如果使用 shell_plus django-extensions 它会在启动时自动将模型加载到shell中。

        2
  •  0
  •   cms    16 年前

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

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