3

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

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 工具检查,也尝试使用不同的用户和计算机

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


版本:

  • MySQL数据库:1.2.2
  • django:1.2.5
  • 蟒蛇:2.6
4

1 回答 1

4

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

而是在表单的__init__方法中进行计算。

于 2011-05-10T20:42:58.980 回答