2016-12-08 10 views
0

Я хочу читать данные из внешней базы данных и создавать отчеты в Django. Я пытаюсь создать необходимые модели для данных, которые я буду получать. Можно ли определить отношения при этом?Определение моделей при использовании нескольких баз данных

Например:

У меня есть 2 таблицы, предметы и участников, причем каждый элемент имеет множество заинтересованных сторон. Можно ли определить модели, которые, когда я это сделаю, ITEM.objects.get(pk = 1).STAKEHOLDERS, я получаю все заинтересованные стороны для этого конкретного элемента?

Дополнительные сведения: Я буду использовать пользовательский sql для получения данных для ITEM и заинтересованных сторон.

ответ

1

Вам понадобится database router, чтобы направить запросы к этим моделям в нужную базу данных.

class Item(Model): 
    _database = 'legacy' 

    # fields... 


class Stakeholder(Model): 
    _database = 'legacy' 

    item = ForeignKeyField(Item, related_name='stakeholders') 
    # fields... 

# ... 

Item.objects.get(pk=1).stakeholders 

# ... 

class DbRouter(object): 

    def db_for_read(self, model, **hints): 
     database = getattr(model, '_database', None) 
     if database: 
      return database 
     else: 
      return 'default' 

    # Implement other methods if needed (e.g. db_for_write) 

# settings.py 
DATABASE_ROUTERS = ['myapp.mymodule.DbRouter'] 
+0

Я знаю, что это работает для базы данных по умолчанию, но если у меня есть вторая устаревшая база данных, будет ли это работать? – Dasith

+0

@Dasith вы имеете в виду, например, «Предмет», принадлежащий базе данных A и «заинтересованной стороне», принадлежащей базе данных B? – lucasnadalutti

+0

Нет, как в одной базе данных, но я буду использовать пользовательский sql для извлечения данных в модели. – Dasith

Смежные вопросы