Django AttributeError: 'str' object n'a pas d'attribut "_default_manager'
L'erreur suivante semble se produire de façon aléatoire sur mon serveur live (c'est à dire par le biais de apache mod_wsgi), mais jamais dans le développement (ex: localhost python manage.py runserver).
Noter que ce n'est pas fréquent et n'est pas quelque chose qui peut être reproduit ou à chaque fois qu'une url spécifique est accessible.
J'ai vu des différentes réponses postées ici sur soi et sur google, mais il ne semble pas y être de façon définitive sur la raison pour laquelle cette erreur se produit. C'est peut-être parce que l'erreur est assez générique, mais la réponse la plus courante semble être due à la circulaire erreurs d'importation. Une autre réponse que j'ai vu est que le modèle FK champ de références n'ont pas été le cas approprié (par exemple, applabel.modèle au lieu de applabel.Modèle), mais tous mes modèle FK champs sont corrects.
La cause de l'erreur semble pointer à l'un de mes admin.py les fichiers. Ce fichier a été à l'origine de l'importation de formulaire personnalisé classes à partir d'un forms.py fichier. À la fois la admin.py fichier et forms.py fichier importé les mêmes modèles à partir d'une models.py fichier. J'ai donc déplacé la forme de classes à la admin.py le fichier au cas où il y a une référence circulaire produit ici, mais j'ai encore de temps en temps obtenir ces erreurs.
Quelqu'un pourrait nous donner un indice quant à pourquoi cette erreur se produit et pourquoi donc, au hasard? J'ai toujours s'assurer que les services concernés sont redémarré après une mise à jour du code.
Traceback est:
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'
Paquets et les versions
- Avertissement: impossible de trouver svn emplacement pour pymssql==2.0.0b1-dev-20111019
- Avertissement: impossible de trouver svn emplacement pour distribuer==0.6.24 dev-r0
- Django==1.3.3
- GnuPGInterface==0.3.2
- Paysage-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: impossible de trouver le svn URL dans dependency_links pour ce forfait: distribuer==0.6.24 dev-r0
- django-debug-toolbar==0.9.4
- django-rosetta==0.6.8
- httplib2==0.7.2
- iotop==0.4.4
- keyring==0.7.1
- sélecteur de langue==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: impossible de trouver le svn URL dans dependency_links pour ce forfait: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
Base De Données: Postgresql 9.1.5
CardAdmin et 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
Je pense que j'ai modifié pour inclure tous vous avez besoin. Ce settings.py détails avez-vous besoin? Merci.
"/myproject/myapps/app/admin.py", ligne 61 de pointage.. ?
OriginalL'auteur chewynougat | 2012-09-17
Vous devez vous connecter pour publier un commentaire.
Note rapide pour les gens toujours à trouver ce vieux problème: Ce cas peut également être causée par une ForeignKey/ManyToMany/OnetoOne qui utilise une chaîne de caractères comme une référence qui n'est pas valide (par exemple: pas correctement pointant vers un modèle).
J'ai été mise à jour/refactoring d'un projet et a couru dans tout cela. S'est avéré que c'était juste une faute de frappe.
Un peu bizarre django n'a pas l'informer de toute évidence, elle ne peut pas résoudre la chaîne, peut-être parce que d'autres applications confondu.
Merci! Juste déplacé mes modèles dans un autre package (app) et j'ai oublié de changer d'=" paramètre".
OriginalL'auteur Bartvds
La solution à mon problème semble avoir été résolu par la recherche sur les liens suivants:
L'obtention de la “str” n'a pas de propriété “_default_manager” sur un Django app juste au démarrage
et:
Django Billet 10405 Commentaire 11
Techniquement Chris Pratt de réponse est tout à fait correcte et une très bonne explication, mais nulle part dans mon code que je pourrais trouver une instance qui serait la cause de cette erreur.
L'erreur s'est produite au hasard, mais la source de cette erreur est le plus souvent déclenchée par un serveur de système de surveillance de demander l'url de base (/) pour mon site (c'est à dire plein HTTP requête de page). Je ne peux que supposer que le système de contrôle utilise quelque chose comme la commande wget pour faire cette vérification, alors j'ai utilisé cette commande pour tester l'url de base pour mon site.
À l'occasion, cette commande doit retourner une réponse 200 OK mais sur la plupart des occasions, ce serait de retourner une Erreur de Serveur Interne 500 réponse, même si je pouvais accéder au site web bien à partir d'un navigateur. Il semble également qu'une Erreur de Serveur Interne 500 réponse toujours de se produire immédiatement après le redémarrage d'Apache.
Je suis encore un peu perplexe quant à la cause exacte et le caractère aléatoire de cette erreur, les discussions que j'ai vu en évidence un possible bug dans le framework Django, mais cela ne se produit pas dans d'autres sites web en utilisant le même ensemble jusqu'à que j'ai mis en place ici. La lecture à travers les commentaires dans le 2ème lien ci-dessus, il semble qu'une telle disposition du code a été utilisé que dans ma question ci-dessus (se produit seulement dans la production à l'aide d'Apache/mod_wsgi, ModelForms utilisé pour l'administration de la section, en utilisant les cours de FK références dans les modèles).
Comme mentionné dans les liens ci-dessus, la solution consiste à insérer:
avant:
dans la base urls.py fichier.
Espère que cela aide d'autres personnes qui pourraient tomber sur cette étrange question. Je n'ai pas eu d'erreurs depuis le code ci-dessus de plus.
OriginalL'auteur chewynougat
_default_manager
est l'attribut sur un modèle qui tient la (surprise, surprise) par défaut manager de ce modèle. Django utilise ce tous sur la place, en particulier dans l'admin, pour revenir querysets pour ModelAdmins.Donc l'erreur est vous dire que quelque part, vous avez passé une chaîne où un modèle de classe ou d'instance a été prévu. Il tente d'appeler
_default_manager
sur la chaîne, et ne parvient pas, évidemment.Toutefois, étant donné que l'erreur vient dans Django code, en particulier lors de la référence à
self.rel.to
sur un exemple, je ne peux que supposer que vous ou une tierce partie dont le code que vous utilisez a fait quelques jolies intégrale et monumental des modifications à quelque chose. Ce n'est pas la façon dont le code boursier doit se comporter.OriginalL'auteur Chris Pratt
J'ai eu une erreur similaire quand j'ai fait:
Mais quand j'ai enlevé les guillemets autour de la référencées modèle de "demande de Devis", l'erreur a disparu.
OriginalL'auteur Frux
J'ai couru dans ce message d'erreur parce que je n'ai pas de spécifier correctement le modèle dans la méta-classe d'une usine
OriginalL'auteur ezdazuzena