/'SimpleLazyObject'对象的TypeError不可调用

时间:2016-04-16 17:34:23

标签: python django mongodb django-nonrel

我正在尝试使用mongodb

处理旧版本的django
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

我正在尝试连接到数据库
但它返回:TypeError at / '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 个答案:

答案 0 :(得分:1)

你有两个名为MongoClient的东西:你从pymongo导入的东西,以及你分配给一个懒惰对象的全局类。但是在get_connection中,你试图调用其中的第一个,但到那时名称已经被反弹以指向第二个。

您应该将该模块级名称更改为其他名称。

(注意,这些都与Django无关;它是一个纯Python问题。)