加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

Django AttributeError:’str’对象没有属性’_default_manager

发布时间:2020-12-20 13:05:22 所属栏目:Python 来源:网络整理
导读:以下错误似乎在我的实时服务器上随机发生(即通过apache mod_wsgi),但从未在开发中(即localhost python manage.py runserver). 请注意,这种情况很少发生,并且不是可以轻松复制的内容,也不是每次访问特定网址时都可以复制的内容. 我已经看到在SO和谷歌上发布的
以下错误似乎在我的实时服务器上随机发生(即通过apache mod_wsgi),但从未在开发中(即localhost python manage.py runserver).

请注意,这种情况很少发生,并且不是可以轻松复制的内容,也不是每次访问特定网址时都可以复制的内容.

我已经看到在SO和谷歌上发布的各种答案,但似乎没有任何明确的原因,为什么会出现这种错误.也许这是因为错误是相当通用的,但最常见的答案似乎是由于循环导入错误.我看到的另一个答案是模型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",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'

包和版本

>警告:找不到pymssql == 2.0.0b1-dev-20111019的svn位置
>警告:无法找到分发的svn位置== 0.6.24dev-r0
> Django == 1.3.3
> GnuPGInterface == 0.3.2
> Landscape-Client == 12.05
> PAM == 0.4.2
> PIL == 1.1.7
> Twisted-Core == 11.1.0
> apt-xapian-index == 0.44
> argparse == 1.2.1
> chardet == 2.0.1
> command-not-found == 0.2.44
> ## FIXME:在此程序包的dependency_links中找不到svn URL:distribute == 0.6.24dev-r0
> django-debug-toolbar == 0.9.4
> django-rosetta == 0.6.8
> httplib2 == 0.7.2
> iotop == 0.4.4
> keyring == 0.7.1
> language-selector == 0.1
> launchpadlib == 1.9.12
> lazr.restfulclient == 0.12.0
> lazr.uri == 1.0.3
> mercurial == 2.0.2
> oauth == 1.0.1
> psycopg2 == 2.4.5
> pyOpenSSL == 0.12
> pycrypto == 2.4.1
> ## FIXME:在此程序包的dependency_links中找不到svn URL:pymssql == 2.0.0b1-dev-20111019
> pyserial == 2.5
> python-apt == 0.8.3ubuntu7
> python-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','no','code','type','status','address_1','address_2','zip','city','country','phone_no','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

解决方法

对于仍然发现此旧问题的人们的快速说明:此情况也可能由使用字符串作为无效引用的ForeignKey / ManyToMany / OnetoOne引起(例如:未正确指向模型).

我正在更新/重构一个项目并遇到了这个问题.原来这只是一个错字.

有点奇怪的django没有明确通知它无法解决字符串,可能是因为其他应用程序混淆了它.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读