Django:将值建模为全局变量

Django: Models values as global variables

我知道这不是最佳实践(我想缓存是更好的方法)但我在代码中看到 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 文件进行配置。

提前致谢!

您可以使用 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>

重新启动您的 wsgi 服务器 (Nginx)。这应该可以解决问题。