Django:模型值为全局变量

时间:2015-07-21 00:39:15

标签: python django nginx

我知道这不是最佳实践(我猜缓存是更好的方法)但我在代码中看到Django模型值在django_app/shared.py中保存为全局变量:

VALS = MyModel.objects.values_list('id', flat=True)
CHOICES = [(x,x) for x in VALS]

django/forms.py

from shared import CHOICES

class MyForm(forms.Form):
    choice = forms.MultipleChoiceField(CHOICES, default='')
    ...

django/views.py

def my_view(request):
    ....
    form = MyForm(request.GET)
    ....

我在nginx后面使用wsgi运行应用程序。现在,问题我看到,即使我在模型中进行了更改,但未在视图中的表单中反映出来。选项始终保持不变。它是否被缓存,因为uwsgi进程会产生多个请求。我无法得到它。请帮忙。

更新:正如所料,它原来是nginx。我重新启动了nginx并且反映了更改。现在,因为没有nginx重新启动它没有更新,所以它是否意味着它可以永远保持这样?我的理解是,一旦创建了新的uwsgi进程,CHOICES就会得到更新。顺便说一句,我们使用uwsgi conf文件进行配置。

提前致谢!

2 个答案:

答案 0 :(得分:1)

您可以使用ModelChoiceField

,而不是这样做
class MyForm(forms.Form):
    choice = forms.ModelChoiceField(queryset=MyModel.objects.all())
    ...

这将在模板中产生以下内容:

<select id="id_field" name="field">
<option value="obj1.id">Object1</option>
<option value="obj2.id">Object2</option>
...
</select>

答案 1 :(得分:0)

重新启动wsgi服务器(Nginx)。那应该解决问题。