Я работаю на сайте Django, используя официальный выпуск Django 1.4. На моем сайте есть несколько приложений. В одном из приложений есть модель с именем Campaign
с FK для моделей в других приложениях. Как было предложено в ссылке Django (https://docs.djangoproject.com/en/dev/ref/models/fields/#django.db.models.ForeignKey), я решил определить поля FK, используя строку вместо потому что я ожидаю, что в следующей версии будут циркулярные ссылки, и такой подход позволит избежать проблем с циклическим импортом.Сайт Django с использованием mod_wsgi на AWS не может создать поле формы FK, потому что связанная модель еще не загружена
Когда я развернул сайт на AWS (Amazon Web Services) с помощью BitNami djangostack 1.4 (Apache, mod_wsgi, MySQL), мой развернутый сайт работал по большей части корректно. На страницах, отображающих формы для модели Campaign
, Django создала исключение при попытке создать поле формы, основанное на поле внешнего ключа модели Campaign
, жалуясь, что связанная модель не была загружена. Смешная/страшная вещь заключается в том, что когда я установил settings.DEBUG
в True (определенно не то, что мы захотим, как только сайт начнет жить), проблема больше не возникает!
Сайт работал отлично, когда я тестировал его на локальном сервере разработки Django, а также отлично работал с использованием того же BitNami djangostack, который был развернут на моей рабочей станции Windows.
Вот соответствующий выход ошибки Apache, который я вижу на консоли AWS.
[error] ERROR :: Internal Server Error: /campaigns/
[error] Traceback (most recent call last):
[error] File "/opt/bitnami/apps/django/lib/python2.6/site-packages/django/core/handlers/base.py", line 101, in get_response
[error] request.path_info)
... (django/wsgi blah blah)
[error] File "/opt/bitnami/apps/django/django_projects/Project/campaign/views.py", line 5, in <module>
[error] from forms import CampaignForm
[error] File "/opt/bitnami/apps/django/django_projects/Project/campaign/forms.py", line 12, in <module>
[error] class CampaignForm(forms.ModelForm):
[error] File "/opt/bitnami/apps/django/lib/python2.6/site-packages/django/forms/models.py", line 206, in __new__
[error] opts.exclude, opts.widgets, formfield_callback)
[error] File "/opt/bitnami/apps/django/lib/python2.6/site-packages/django/forms/models.py", line 160, in fields_for_model
[error] formfield = f.formfield(**kwargs)
[error] File "/opt/bitnami/apps/django/lib/python2.6/site-packages/django/db/models/fields/related.py", line 1002, in formfield
[error] (self.name, self.rel.to))
[error] ValueError: Cannot create form field for 'reward' yet, because its related model 'reward.Reward' has not been loaded yet
Итак, вот краткое резюме:
- Мой сайт работает на моем локальном сервере разработки Django, независимо от значения settings.DEBUG
- С стек BitNami на моей локальной машине Windows, это работы, независимо от значения settings.DEBUG
- с стек BitNami на AWS (Ubuntu), она работает с DEBUG = True , но не с DEBUG = False
Я понимаю, что означает ошибка, но я не понимаю, почему это происходит, то почему зависимая модель не загружена. Кто-нибудь сталкивался с подобной проблемой или имел советы, которые могли бы помочь мне исправить это?
Примечание. Я попытался отправить сообщение об ошибке Google, но все, что я нашел, было исходным кодом Django, в котором эта ошибка была поднята. Я также попытался найти более общие запросы, такие как mod_wsgi django related model
, но я не мог найти ничего, что казалось бы имеющим отношение к моей проблеме.
Это приложение связанной модели включено в 'INSTALLED_APPS'? –
Да, все приложения моего сайта находятся в 'INSTALLED_APPS'. Отличается ли порядок приложений? – mbargiel
Одна из ссылок, которые я нашел во время работы в Интернете, - http://blog.dscpl.com.au/2010/03/improved-wsgi-script-for-use-with.html. Я не уверен, что это может мне помочь или нет, но я посмотрю на это. – mbargiel