Уведомления

Группа в Telegram: @pythonsu

#1 Июль 6, 2011 12:09:27

armor85
От:
Зарегистрирован: 2008-08-01
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Несколько баз

Здравствуйте,
начинаю осваивать 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 попала в нужную бд?



Офлайн

#2 Июль 6, 2011 12:51:14

chkur
От:
Зарегистрирован: 2010-01-07
Сообщения: 19
Репутация: +  0  -
Профиль   Отправить e-mail  

Несколько баз

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
Связи между таблицами в разных БД лучше не делать.



Отредактировано (Июль 6, 2011 15:17:05)

Офлайн

#3 Июль 6, 2011 13:22:38

armor85
От:
Зарегистрирован: 2008-08-01
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Несколько баз

Связи и нет, насколько я понял это для 1.2, в 1.3 проще должен быть способ, разве нет?



Офлайн

#4 Июль 6, 2011 13:36:02

chkur
От:
Зарегистрирован: 2010-01-07
Сообщения: 19
Репутация: +  0  -
Профиль   Отправить e-mail  

Несколько баз

“Способ” появился в 1.2.
Ссылка для 1.3: https://docs.djangoproject.com/en/1.3/topics/db/multi-db/#using-routers :)



Офлайн

#5 Июль 6, 2011 13:59:46

armor85
От:
Зарегистрирован: 2008-08-01
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Несколько баз

:) Спасибо



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version