Я спросил об этом в группе пользователей без ответа, поэтому я решил попробовать здесь. Я пытаюсь настроить пользовательский менеджер для подключения к другой базе данных на том же сервере, что и мое mysql-соединение по умолчанию. Я пробовал , следуя примерам here и here, но не повезло. Я получаю пустой кортеж при возврате MyCustomModel.objects.all()
.Несколько баз данных в Django 1.0.2 с настраиваемым менеджером
Вот что я имею в 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, я буду смотреть в код менеджера, чтобы увидеть, если я могу понять его, но я просто интересно, если я я делаю что-то неправильно здесь.
UPDATE: Это сейчас в багажнике Django и будет частью 1.2 выпуска http://docs.djangoproject.com/en/dev/topics/db/multi-db/
Это нарушает некоторые существенные особенности Django. Единственное соединение с базой данных находится в вашем модуле настроек. Что вы на самом деле пытаетесь сделать? Вы должны рассмотреть другие подходы, а не разбить Django. –
Если вы посмотрите на примеры, которые я пытаюсь использовать, один из Адриана. У меня есть решение для работы, где я использую вспомогательный модуль и просто переопределяю функцию сохранения в модели, но это немного хак, и я не получаю никаких преимуществ django. Если у вас есть предложение о том, как добавить поддержку нескольких баз данных в приложение, пожалуйста, дайте мне знать. –
Можете ли вы быть немного более терпеливым? Сейчас идет проект GSOC, который добавляет к Django поддержку нескольких баз данных. – ironfroggy