2016-04-16 3 views
0

Je suis en train de travailler sur une ancienne version de django avec MongoDBTypeError à/objet « SimpleLazyObject » est pas appelable

Django==1.5.11 
django-crispy-forms==1.5.2 
django-ifc-rwfm==0.1 
django-mongodb-engine==0.6.0 
django-registration-redux==1.2 
djangotoolbox==1.8.0 
pymongo==3.2.2 

Je suis en train de faire la connexion à la base de données
mais il retourne: TypeError à/ 'SimpleLazyObject' objet n'est pas appelable

Ceci est mon fichier __init__.py

from django.conf import settings 
from django.utils.functional import SimpleLazyObject  

from pymongo import MongoClient  

_connection = None  


def get_connection(): 
    global _connection 
    if not _connection: 
     _connection = MongoClient(
      host=getattr(settings, 'MONGODB_HOST', None), 
      port=getattr(settings, 'MONGODB_PORT', None) 
     ) 
     username = getattr(settings, 'MONGODB_USERNAME', None) 
     password = getattr(settings, 'MONGODB_PASSWORD', None) 
     db = _connection[settings.MONGODB_DATABASE] 
     if username and password: 
      db.authenticate(username, password) 
     return db 
    return _connection[settings.MONGODB_DATABASE]  


MongoClient = SimpleLazyObject(get_connection)  


def get_collection(collection_name): 
    return getattr(MongoClient, collection_name) 


Je suis nouveau à django, merci d'avance.

Répondre

1

Vous avez deux choses appelées MongoClient: celle que vous avez importée de pymongo, et la classe globale que vous avez assignée à un objet paresseux. Mais dans get_connection, vous essayez d'appeler le premier de ceux-ci, mais d'ici là le nom a déjà été rebondi pour pointer vers le second.

Vous devez remplacer ce nom au niveau du module par un autre.

(Note, rien de tout cela n'a rien à voir avec Django,. Il est un problème pur Python)

+0

merci pour la réponse, vous avez raison; Je l'ai compris aussi et j'allais mettre à jour le post. de toute façon merci pour la réponse. changer le nom au niveau du module créé la collection '** ** = mongoClient SimpleLazyObject (get_connection) def get_collection (nom_collection): getattr de retour (** ** mongoClient, nom_collection)' –