【问题标题】:TypeError at / 'SimpleLazyObject' object is not callableTypeError at / 'SimpleLazyObject' 对象不可调用
【发布时间】:2016-04-16 17:34:23
【问题描述】:

我正在尝试使用 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 新手,在此先感谢。

【问题讨论】:

    标签: python django mongodb django-nonrel


    【解决方案1】:

    你有两个叫做MongoClient 的东西:一个是你从 pymongo 导入的,另一个是你分配给惰性对象的全局类。但是在get_connection 中,您正试图调用其中的第一个,但此时该名称已被反弹指向第二个。

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

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

    【讨论】:

    • 谢谢你的回答,你是对的;我也想通了,打算更新帖子。无论如何感谢您的回复。更改模块级名称创建了集合` mongoClient = SimpleLazyObject(get_connection) def get_collection(collection_name): return getattr(mongoClient, collection_name)`
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-25
    • 2021-04-15
    • 2011-10-01
    • 2020-11-10
    • 2017-09-09
    • 2016-07-23
    • 2015-03-07
    相关资源
    最近更新 更多