Модели Django - кеширует ли Django предыдущие запросы? - PullRequest
0 голосов
/ 26 августа 2009

Ниже я вызываю те же методы в author и w5 модельных объектах. Но один из них вызывает ошибку:

>>> author = models.Author('ali')
>>> author.article_set.count()
---------------------------------------------
ValueError: invalid literal for int() with base 10: 'ali'

>>> w5 = models.Author(name='w5')
>>> w5.article_set.count()
0

На самом деле, до этих строк у меня ранее было неправильное определение класса Author. Сначала я получил ValueError от объекта автора с этим прежним определением Author. Затем я изменил класс Author и перезагрузил модули.

После перезагрузки моделей с помощью reloadmodels.py , написанного Чэдом Браун-Дуином, вновь созданные объекты, такие как w5, работают правильно. Но такие объекты, как author, вызывают ошибки.

Это противоречивое поведение из-за логики кэширования запросов django или reloadmodels.py? Есть идеи?

Спасибо ...

Ответы [ 2 ]

1 голос
/ 26 августа 2009

Это не имеет ничего общего с Django, это вещь Python. В связанном вопросе Чад импортировал такие модели:

import myapp.models as mymodels

Используя этот синтаксис, вы можете использовать reload() для обновления определений классов при их изменении на диске. Тем не менее, гораздо более стандартно импортировать ваши модели так:

from myapp.models import MyModel

Если вы сделаете это - и большинство людей делают - reload () не даст никакого эффекта, даже если взломать Чада.

Действительно, проще просто выйти из оболочки Python и перезапустить ее - особенно если вы используете shell_plus из django-extensions , которая автоматически загружает ваши модели в оболочку при запуске.

0 голосов
/ 26 августа 2009

Если вы измените определения модели в django, вам необходимо повторно применить ваши изменения к базе данных. Если вы можете вручную удалить таблицы, вы можете восстановить структуру с помощью manage.py syncdb

Вы можете использовать команду manage.py sql, чтобы проверить определения SQL, которые django будет использовать для соответствия вашему новому классу модели, и вручную отредактировать таблицы, чтобы соответствовать, если вы не хотите терять таблицу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...