简体   繁体   English

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

[英]Defining models when using multiple databases

I want to read data from an external database and generate reports in Django. 我想从外部数据库读取数据并在Django中生成报告。 I am trying to create the required models for the data that I will be fetching. 我正在尝试为将要获取的数据创建所需的模型。 Is it possible to define relationships when doing this? 这样做时可以定义关系吗?

For example: 例如:

I have 2 tables, ITEMS and STAKEHOLDERS, each ITEM has many STAKEHOLDERS. 我有2张桌子,ITEMS和STAKEHOLDERS,每个ITEM有很多STAKEHOLDERS。 Is it possible to define the models such that, when I do, ITEM.objects.get(pk = 1).STAKEHOLDERS , I get all the stakeholders for that specific item? 是否可以定义模型,以便在执行ITEM.objects.get(pk = 1).STAKEHOLDERS时可以得到该特定项目的所有涉ITEM.objects.get(pk = 1).STAKEHOLDERS

Some additional details: I will be using custom sql to fetch the data for an ITEM and Stakeholder. 其他一些细节:我将使用自定义sql来获取ITEM和涉众的数据。

You'll need a database router to direct queries on these models to the desired database. 您将需要一个数据库路由器来将对这些模型的查询定向到所需的数据库。

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']

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM