Найти - Пользователи
Полная версия: Несколько баз
Начало » Django » Несколько баз
1
armor85
Здравствуйте,
начинаю осваивать Django путём переписывания существующего проекта с php, так сказать для обучения. Возник вопрос при использовании нескольких баз данных в одном приложении. С настройками DATABASES понятно, с запросами Author.objects.using('default').all() тоже всё понятно.
Не понятно как заставить модель относится к другой базе? python manage.py syncdb созадёт таблицу в базе указанной в default.

Что в модели нужно прописать
from django.db import models
from django.conf import settings
class News(models.Model):
news_id = models.AutoField(primary_key=True)
source = models.CharField(max_length=400)
text = models.TextField()
image = models.FileField(upload_to=settings.UPLOADS_ROOT+"/news/")
date = models.DateTimeField(auto_now=True)
чтобы News попала в нужную бд?
chkur
https://docs.djangoproject.com/en/1.2/topics/db/multi-db/#using-routers
Я делал как-то так (базы default и spr_db):
SPR_MODELS=['pidpr','dov_post']

class reestrRouter(object):
"""A router to control all database operations"""

def db_for_read(self, model, **hints):
if model._meta.object_name in SPR_MODELS:
return 'spr_db'
else:
return 'default'
return None

def db_for_write(self, model, **hints):
return 'default'

def allow_relation(self, obj1, obj2, **hints):
"Allow any relation"
return True

def allow_syncdb(self, db, model):
print model._meta.app_label, model._meta.object_name
if db == 'spr_db':
return model._meta.object_name in SPR_MODELS
else:
return model._meta.object_name not in SPR_MODELS
return None
Связи между таблицами в разных БД лучше не делать.
armor85
Связи и нет, насколько я понял это для 1.2, в 1.3 проще должен быть способ, разве нет?
chkur
“Способ” появился в 1.2.
Ссылка для 1.3: https://docs.djangoproject.com/en/1.3/topics/db/multi-db/#using-routers :)
armor85
:) Спасибо
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB