【问题标题】:Django query executed in view returns old data在视图中执行的 Django 查询返回旧数据
【发布时间】:2011-08-22 18:47:10
【问题描述】:

我有一个查询模型以填充表单的视图:

class AddServerForm(forms.Form):
    …snip…
    # Compile and present choices for HARDWARE CONFIG
    hwChoices = HardwareConfig.objects.\
        values_list('name','description').order_by('name')
    hwChoices = [('', '----- SELECT ONE -----')] +\
        [ (x,'{0} - {1}'.format(x,y)) for x,y in hwChoices ]

    hwconfig = forms.ChoiceField(label='Hardware Config', choices=hwChoices)
    …snip…

def addServers(request, template="manager/add_servers.html",
    template_success="manager/add_servers_success.html"):
    if request.method == 'POST':
        # …snip… - process the form
    else:
        # Page was called via GET - use a default form
        addForm = AddServerForm()

    return render_to_response(template, dict(addForm=addForm),
        context_instance=RequestContext(request))

对 HardwareConfig 模型的添加是使用管理界面完成的。更改会按预期立即显示在管理界面中。

通过 shell 运行查询会按预期返回所有结果:

michael@victory> python manage.py shell
Python 2.6 (r26:66714, Feb 21 2009, 02:16:04)
[GCC 4.3.2 [gcc-4_3-branch revision 141291]] on linux2
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> from serverbuild.base.models import HardwareConfig
>>> hwChoices = HardwareConfig.objects.\
...         values_list('name','description').order_by('name')

hwChoices 现在包含完整的结果集。

但是,加载 addServers 视图(上图)会返回旧的结果集,而缺少新添加的条目。

我必须重新启动网络服务器才能显示更改,这使得查询似乎被缓存在某个地方。

  • 我没有在任何地方进行任何显式缓存(grep -ri cache /project/root 不返回任何内容)
  • 缓存页面的不是浏览器 - 通过 chrome 工具检查,也尝试使用不同的用户和计算机

出了什么问题,我该如何解决?


版本:

  • MySQLdb:1.2.2
  • django:1.2.5
  • 蟒蛇:2.6

【问题讨论】:

    标签: mysql django django-wsgi


    【解决方案1】:

    hwChoices 在定义表单时进行评估 - 即在流程开始时。

    改为在表单的__init__ 方法中进行计算。

    【讨论】:

    • 啊!我现在看到了...谢谢。就我而言,我已将整个主体移至 __init__... 我猜从性能的角度来看,最好在 init 内做尽可能少的事情,但是对于我的代码来说,这将是过早的优化.除了性能之外还有什么理由只将计算移到__init__
    猜你喜欢
    • 1970-01-01
    • 2023-03-12
    • 2021-01-25
    • 2022-10-07
    • 2011-03-02
    • 2021-12-30
    • 1970-01-01
    • 2018-12-06
    • 2021-05-25
    相关资源
    最近更新 更多