2016-04-16 51 views
0

我試圖用MongoDB的一個老版本的Django的工作類型錯誤在/「SimpleLazyObject」對象不是可調用

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 

我試圖讓連接到數據庫
但它返回:類型錯誤的/ 'SimpleLazyObject' 對象不是可調用

這是我的__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) 


我是django的新手,在此先感謝。

回答

1

你有兩件東西叫做MongoClient:你從pymongo導入的東西,以及你分配給一個懶惰對象的全局類。但是在get_connection中,你試圖打電話給那些第一個,但到那時這個名字已經被反彈到指向第二個。

您應該將該模塊級別的名稱更改爲其他名稱。

(注意,這都不是什麼關係Django的;這是一個純Python的問題)

+0

感謝您的回答,你是對的;我想清楚了,並打算更新這篇文章。無論如何感謝回覆。 改變模塊級名稱創建集合 '** mongoClient ** = SimpleLazyObject(get_connection) DEF get_collection(集合名稱): 返回GETATTR(** ** mongoClient,集合名稱)' –

相關問題