我在用户组中询问了这个问题,但没有得到回应,所以我想我会在这里尝试一下。
我正在尝试设置自定义管理器来连接到另一个数据库
在与我的默认 mysql 连接相同的服务器上。我努力了
遵循示例here http://groups.google.com/group/django-developers/browse_thread/thread/5d8c73eb483029af/19b19ed79bbbfa0d and here http://www.djangrrl.com/view/multiple-database-connection-a-simple-use-case/但没有运气。返回时我得到一个空元组MyCustomModel.objects.all()
.
这是我在 manager.py 中的内容
from django.db import models
from django.db.backends.mysql.base import DatabaseWrapper
from django.conf import settings
class CustomManager(models.Manager):
"""
This Manager lets you set the DATABASE_NAME on a per-model basis.
"""
def __init__(self, database_name, *args, **kwargs):
models.Manager.__init__(self, *args, **kwargs)
self.database_name = database_name
def get_query_set(self):
qs = models.Manager.get_query_set(self)
qs.query.connection = self.get_db_wrapper()
return qs
def get_db_wrapper(self):
# Monkeypatch the settings file. This is not thread-safe!
old_db_name = settings.DATABASE_NAME
settings.DATABASE_NAME = self.database_name
wrapper = DatabaseWrapper()
wrapper._cursor(settings)
settings.DATABASE_NAME = old_db_name
return wrapper
这是我在 models.py 中的内容:
from django.db import models
from myproject.myapp.manager import CustomManager
class MyCustomModel(models.Model):
field1 = models.CharField(max_length=765)
attribute = models.CharField(max_length=765)
objects = CustomManager('custom_database_name')
class Meta:
abstract = True
但如果我跑MyCustomModel.objects.all()
我得到一个空列表。
我对这个东西很陌生,所以我不确定这是否适用于
1.0.2,我将查看 Manager 代码,看看我是否能弄清楚
它出来了,但我只是想知道我是否在这里做错了什么。
更新:
现在它位于 Django trunk 中,并将成为 1.2 版本的一部分http://docs.djangoproject.com/en/dev/topics/db/multi-db/ http://docs.djangoproject.com/en/dev/topics/db/multi-db/