2015-07-21 2 views
0

я знаю, что это не лучшая практика (я предполагаю, что кэширование может быть лучше), но я видел в коде, что значения модели 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) 
    .... 

Я запускаю приложение, используя wsgi за nginx. Теперь я вижу, что даже если я сделал изменения в модели, которые не отражаются в форме на представлении. Опции всегда остаются неизменными. Получается ли он кэширован, потому что процесс uwsgi возникает из нескольких запросов. Я не мог понять. Пожалуйста помоги.

ОБНОВЛЕНИЕ: Как и ожидалось, это оказалось nginx. Я перезапустил nginx, и изменения были отражены. Теперь, поскольку он не обновлялся без перезапуска nginx, значит ли это, что он мог остаться таким навсегда? Я понимаю, что CHOICES будет обновляться, как только будет создан новый процесс uwsgi. BTW, мы используем файл uwsgi conf для конфигурации.

Заранее благодарен!

+0

Вы пробовали перезапуска WSGI сервера (Nginx)? –

ответ

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> 
+0

Я не могу этого сделать, потому что значения фактически являются уникальным набором всех значений поля. И он должен отображать только те, что находятся в базе данных. –

+0

Здесь вы получите все «идентификаторы», которые присутствуют в базе данных. Это будет уникальный набор, поскольку никакие 2 объекта не будут иметь одинаковый 'id'. –

+0

'id' является первичным ключом, поэтому он должен быть уникальным. Как насчет модели «Сотрудник» и отображения различных имен в качестве параметров? И это должно обновляться в соответствии с изменениями в базе данных. Итак, мой друг, это не сработает. –

Смежные вопросы