2016-04-16 3 views
0

ich auf einer alten Version von django mit mongodbTypeerror an/‚SimpleLazyObject‘ Objekt ist nicht aufrufbar

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 

I-Anschluss
in der Datenbank zu bekommen versuche zu arbeiten, ich versuche, aber es gibt: Typeerror an/ 'SimpleLazyObject' Objekt ist aufrufbar nicht

Das ist mein __init__.py Datei

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) 


Ich bin neu bei Django, danke im Voraus.

Antwort

1

Sie haben zwei Dinge namens MongoClient: die eine, die Sie aus Pymongo importiert haben, und die globale Klasse, die Sie einem faulen Objekt zugewiesen haben. Aber in get_connection, versuchen Sie, den ersten von denen zu nennen, aber bis dahin wurde der Name bereits zurückgeworfen, um auf den zweiten zu zeigen.

Sie sollten diesen Namen auf Modulebene auf etwas anderes ändern.

(Beachten Sie, nichts davon etwas mit Django zu tun hat;. Es ist ein reines Python-Problem)

+0

Dank für die Antwort, Sie haben Recht; Ich habe es auch herausgefunden und werde die Post aktualisieren. Trotzdem danke für die Antwort. die Modulebene Namen zu ändern erstellt die Sammlung '** mongoClient ** = SimpleLazyObject (get_connection) def get_collection (collection_name): return getattr (** ** mongoClient, collection_name)' –