/ 'SimpleLazyObject' 对象的 TypeError 不可调用
TypeError at / 'SimpleLazyObject' object is not callable
我正在尝试使用旧版本的 django mongodb
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
我正在尝试连接到数据库
但它 returns : 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 的新手,在此先感谢。
你有两个东西叫做 MongoClient
:一个是你从 pymongo 导入的,另一个是你分配给惰性对象的全局 class。但是在 get_connection
中,您正试图调用其中的第一个,但到那时该名称已经反弹指向第二个。
您应该将该模块级名称更改为其他名称。
(注意,none 这与 Django 有任何关系;这是一个纯粹的 Python 问题。)
我正在尝试使用旧版本的 django mongodb
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
我正在尝试连接到数据库
但它 returns : 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 的新手,在此先感谢。
你有两个东西叫做 MongoClient
:一个是你从 pymongo 导入的,另一个是你分配给惰性对象的全局 class。但是在 get_connection
中,您正试图调用其中的第一个,但到那时该名称已经反弹指向第二个。
您应该将该模块级名称更改为其他名称。
(注意,none 这与 Django 有任何关系;这是一个纯粹的 Python 问题。)