Следующая ошибка, по-видимому, возникает случайным образом на моем рабочем сервере (т. Е. Через apache mod_wsgi), но никогда не в процессе разработки (т. Е. Localhost python manage.py runserver).
Обратите внимание, что это происходит нечасто, и это не то, что можно легко воспроизвести или каждый раз при доступе к определенному URL-адресу.
Я видел различные ответы, размещенные как здесь, в SO, так и в Google, но, похоже, нет какой-либо окончательной причины возникновения этой ошибки. Возможно, это связано с тем, что ошибка довольно общая, но наиболее распространенный ответ, по-видимому, связан с циклическими ошибками импорта. Другой ответ, который я видел, заключается в том, что ссылки на поля FK модели не были правильными (например, applabel.model вместо applabel.Model), но все поля FK моей модели верны.
Причина ошибки, похоже, указывает на один из моих файлов admin.py. Этот файл изначально импортировал пользовательские классы форм из файла forms.py. И файл admin.py, и файл forms.py импортировали одни и те же модели из файла models.py. Поэтому я переместил классы формы в файл admin.py на случай, если здесь возникнет циклическая ссылка, но я все еще иногда получаю эти ошибки.
Может ли кто-нибудь пролить свет на то, почему эта ошибка возникает и почему так случайно? Я всегда гарантирую перезапуск соответствующих служб после обновления кода.
Трассировка это:
Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py", line 101, in get_response
request.path_info)
File "/usr/local/lib/python2.7/dist-packages/django/core/urlresolvers.py", line 250, in resolve
for pattern in self.url_patterns:
File "/usr/local/lib/python2.7/dist-packages/django/core/urlresolvers.py", line 279, in _get_url_patterns
patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
File "/usr/local/lib/python2.7/dist-packages/django/core/urlresolvers.py", line 274, in _get_urlconf_module
self._urlconf_module = import_module(self.urlconf_name)
File "/usr/local/lib/python2.7/dist-packages/django/utils/importlib.py", line 35, in import_module
__import__(name)
File "/myproject/urls.py", line 6, in <module>
admin.autodiscover()
File "/usr/local/lib/python2.7/dist-packages/django/contrib/admin/__init__.py", line 26, in autodiscover
import_module('%s.admin' % app)
File "/usr/local/lib/python2.7/dist-packages/django/utils/importlib.py", line 35, in import_module
__import__(name)
File "/myproject/myapps/app/admin.py", line 61, in <module>
class CardAdminForm(forms.ModelForm):
File "/usr/local/lib/python2.7/dist-packages/django/forms/models.py", line 205, in __new__
opts.exclude, opts.widgets, formfield_callback)
File "/usr/local/lib/python2.7/dist-packages/django/forms/models.py", line 159, in fields_for_model
formfield = f.formfield(**kwargs)
File "/usr/local/lib/python2.7/dist-packages/django/db/models/fields/related.py", line 913, in formfield
'queryset': self.rel.to._default_manager.using(db).complex_filter(self.rel.limit_choices_to),
AttributeError: 'str' object has no attribute '_default_manager'
Пакеты и версии
- Предупреждение: не удается найти местоположение svn для pymssql==2.0.0b1-dev-20111019
- Предупреждение: не удается найти местоположение svn для Distribute==0.6.24dev-r0.
- Джанго == 1.3.3
- GnuPGInterface==0.3.2
- Пейзаж-клиент == 12.05
- ПАМ==0,4,2
- ПИЛ==1.1.7
- Витое ядро == 11.1.0
- apt-xapian-индекс == 0,44
- разбор == 1.2.1
- карта == 2.0.1
- команда не найдена == 0.2.44
- ## ИСПРАВЛЕНИЕ: не удалось найти URL-адрес svn в dependency_links для этого пакета: Distribute==0.6.24dev-r0
- панель инструментов django-debug == 0.9.4
- джанго-розетта==0.6.8
- httplib2==0.7.2
- iotop==0.4.4
- брелок == 0.7.1
- выбор языка == 0,1
- пусковая библиотека == 1.9.12
- lazr.restfulclient==0.12.0
- lazr.uri==1.0.3
- ртутный == 2.0.2
- оаут == 1.0.1
- psycopg2==2.4.5
- pyOpenSSL == 0,12
- крипто == 2.4.1
- ## ИСПРАВЛЕНИЕ: не удалось найти URL-адрес svn в dependency_links для этого пакета: pymssql==2.0.0b1-dev-20111019
- pyserial==2.5
- Python-apt == 0.8.3ubuntu7
- python-debian==0.1.21ubuntu1
- отчетлаб==2.5
- простой json == 2.3.2
- ufw==0.31.1-1
- вадлиб==1.3.0
- wsgiref==0.1.2
- XLwt==0.7.4
- zope.interface==3.6.1
База данных: Postgresql 9.1.5
CardAdmin и CardAdminForm:
class CardAdmin(admin.ModelAdmin):
form = CardAdminForm
raw_id_fields = ('cust', 'acc', 'vehicle', 'driver')
list_display = ('id', 'pan', 'name', 'expiry', 'created', 'modified')
list_filter = ('status', )
search_fields = ['id', 'pan']
admin.site.register(Card, CardAdmin)
class CardAdminForm(forms.ModelForm):
"""
A Form for Cards (Admin console)
"""
def __init__(self, *args, **kwargs):
super(CardAdminForm, self).__init__(*args, **kwargs)
self.fields['cust'].required = True
self.fields['acc'].required = True
self.fields['name'].required = True
self.fields['code'].widget = forms.PasswordInput()
self.fields['code'].max_length = 6
class Meta:
model = Card
fields = (
'cust',
'name',
'acc',
'no',
'code',
'type',
'status',
'address_1',
'address_2',
'zip',
'city',
'country',
'phone_no',
'expiry',
'vehicle',
'driver'
)
def save(self, commit=True):
# Save some additional data.
form_instance = super(CardAdminForm, self).save(commit=False)
cleaned_data = self.cleaned_data
form_instance.pan = '%s%s%s'\
% (
cleaned_data['acc'].iso.number,
cleaned_data['acc'].number,
cleaned_data['no']
)
if commit:
form_instance.save()
return form_instance