Django混合表单之间的状态

时间:2014-01-17 10:37:40

标签: django gunicorn

我有一个我以前从未见过的奇怪问题,我有点陷入下一步的困境。

我们有一个相当标准的Django应用程序,其中一些表单使用基于类的视图,我们发现状态在表单之间以奇怪的方式混合。

例如,用户A在网站上并填写表单X并设置其邮政编码。

用户B完全转到另一个表单,形成Y,但邮政编码字段已填入用户A的邮政编码。

字段共享相同的名称,但是完全独立的形式。此示例中的字段是标准的Django CharField。

我没有设法使用Django dev服务器在本地尝试复制此行为。我已经将gunicorn升级到最新版本,我已将其设置为使用单个工作程序,我已经在Django项目中禁用缓存,我可以找到它。

它停留在Django 1.3.7上,升级到支持的版本并不是一个简单的应用程序。它在nginx后面以gunicorn 18运行。

我注意到Django在基于类的视图中提到了线程安全性,但我没有看到我们将任何可变对象传递给视图,而且它都是一个相当的计划视图和ModelForm。 Django的会话存储是默认的(它以前是其他东西,但我删除它使用Django默认值,我认为是数据库)。

有什么想法可以尝试解决这个问题吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

想出来 - 结果是它与1.3中的get_initial的行为有关,在Django 1.4中已经改变了

https://docs.djangoproject.com/en/dev/releases/1.4/#formmixin-get-initial-returns-an-instance-specific-dictionary

我们更改了get_initial以使用dict的副本而不是默认实现,现在一切都很好:)