2016-04-16 50 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,集合名称)' –

相关问题