使用多个数据库时定义模型

时间:2016-12-08 18:53:05

标签: python django

我想从外部数据库读取数据并在Django中生成报告。我正在尝试为我将要获取的数据创建所需的模型。这样做是否可以定义关系?

例如:

我有2个表,ITEMS和STAKEHOLDERS,每个ITEM都有许多利益相关者。是否可以定义模型,当我这样做时,ITEM.objects.get(pk = 1).STAKEHOLDERS,我得到该特定项目的所有利益相关者?

一些额外的细节:我将使用自定义sql来获取ITEM和利益相关者的数据。

1 个答案:

答案 0 :(得分: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']