以下錯誤似乎隨機發生在我的現場服務器上(即通過Apache mod_wsgi),但從未在開發中(即localhost python manage.py runserver)。Django AttributeError:'str'對象沒有屬性'_default_manager'
請注意,這種情況很少發生,並且不是每次訪問特定網址都可輕鬆複製的內容。
我已經看到在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的位置分佈== 0.6.24dev-r0
- Django == 1.3.3
- GnuPGInterface == 0.3.2
- 景觀客戶端== 12.05
- PAM == 0.4.2
- PIL == 1.1.7
- 扭絞芯== 11.1.0
- 易於-Xapian的折射率== 0.44
- argparse == 1.2.1
- chardet的== 2.0.1
- 命令未找到== 0.2.44
- ## FIXME:找不到svn的URL在dependency_links這個包:分配= = 0.6.24dev-r0
- Django的調試工具欄== 0.9.4
- Django的羅塞塔== 0.6.8
- httplib2的== 0.7.2
- iotop == 0.4.4
- 鑰匙圈== 0.7。 1
- 語言選擇器== 0.1
- launchpadlib == 1.9.12
- lazr.restfulclient == 0.12.0
- lazr.uri == 1.0.3
- 我rcurial == 2.0。2
- OAuth的== 1.0.1
- psycopg2 == 2.4.5
- pyOpenSSL == 0.12
- pycrypto == 2.4.1
- ## FIXME:無法找到dependency_links SVN的網址這個包:pymssql == 2.0.0b1-DEV-20111019
- pyserial == 2.5
- 蟒-易於== 0.8.3ubuntu7
- 蟒-的Debian == 0.1.21ubuntu1
- ReportLab的== 2。 5
- simplejson == 2.3.2
- UFW == 0.31.1-1
- wadllib == 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
你可以寫的版本是您使用的軟件包指定模型? '點 - 凍結'可以做到這一點,請寫我數據庫引擎和版本。 'settings.py'的內容也很好。 CardAdmin和CardAdminForm類的定義也需要 – WBAR
我想我已經編輯過,包括所有你需要的東西。你需要什麼settings.py細節?謝謝。 – chewynougat
「/myproject/myapps/app/admin.py」,第61行指向..? – WBAR