Поле доступно через оболочку Django, но не через веб-приложение - PullRequest
3 голосов
/ 01 ноября 2011

На веб-странице я получаю следующую ошибку:

FieldError at /foo/bar/
Cannot resolve keyword 'foos' into field. Choices are: __unused__, [snip]

Код проблемы

User.objects.filter(foos__name='bar')

Когда я запускаю это в оболочке, это работает, и я получаю набор записей:

>>> User.objects.filter(foos__name='bar')
[<User: JordanReiter>]

Но на веб-странице я получаю исключение выше.

Я никогда раньше не сталкивался с этой проблемой, и мне интересно, что я что-то упустил?

Обновление

Основываясь на проведении различий между "Вариантами: ..." в Интернете и в оболочке, кажется, что в оболочке доступно 7 полей, которые недоступны, если я сделаю запрос в Интернете , Они выглядят как обычные ForeignKey поля, указывающие на пользователя, без отличий от других работающих полей.

До сих пор проверено

  • INSTALLED_APPS идентичны для обеих настроек
  • runserver версия также работает (как и следовало ожидать)
  • User используется идентично в обоих случаях и составляет django.contrib.auth.models.User
  • связанные имена для пользователя оболочки и пользователя веб-приложения определенно различны. User._meta.get_all_related_objects() в оболочке отображает примерно на 7 связанных полей больше, чем если я дам это из веб-приложения.
  • значения для настроек также в основном идентичны (один имеет настройки TEST_XYZ, но они ни на что не влияют)

Ответы [ 2 ]

1 голос
/ 07 ноября 2011

Это всего лишь своего рода ответ. Оказывается, причина того, что поле недоступно, заключается в том, что все модели установленных приложений не загружаются правильно при первой компиляции приложения, поэтому приложение постоянно считает, что определенные поля не существуют, даже после того, как они распознают модели для эти поля существуют. Похоже, что это связано с этой ранее, столь же запутанной проблемой:

SO: внутренняя ошибка сервера при первом запросе (и только первый запрос) после перезагрузки сервера

О, и как я это исправил, так это изменил области кода, которые импортировали модели, которые веб-сервер не мог найти по первому запросу. Каким-то образом пропуск этих значений означал, что сервер распознал наличие соответствующих полей. Супер странность!

0 голосов
/ 02 ноября 2011

Обратные внешние ключи добавляются в модели, только если приложение, в котором они находятся, находится в INSTALLED_APPS. Я знаю, вы говорите, что ваш файл settings.py такой же, как в разработке, но почему-то ваше foo приложение находится в INSTALLED_APPS локально, а не на сервере. Возможно, у вас есть переопределение local_settings?

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