Выполненный в представлении запрос Django возвращает старые данные - PullRequest
3 голосов
/ 11 мая 2011

У меня есть представление, которое запрашивает модель для заполнения формы:

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 выполняются с использованием интерфейса администратора.Изменения немедленно отображаются в интерфейсе администратора, как и ожидалось.

Выполнение запроса через оболочку возвращает все результаты, как и ожидалось:

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инструменты, также пытались использовать другой пользователь и компьютер

Что не так и как это исправить?


Версии:

  • MySQLdb: 1.2.2
  • django: 1.2.5
  • python: 2.6

1 Ответ

3 голосов
/ 11 мая 2011

hwChoices оценивается, когда форма определена, т.е. когда начинается процесс.

Вместо этого выполните расчет по методу __init__ формы.

...