2016-12-08 30 views
0

外部データベースからデータを読み取り、Djangoでレポートを生成したいとします。私はフェッチするデータのために必要なモデルを作成しようとしています。これを行うときに関係を定義することは可能ですか?例えば複数のデータベースを使用する場合のモデルの定義

私は2つのテーブル、ITEMSやステークホルダーを持って、各ITEMは、多くの関係者を持っています。私がしたときに、ITEM.objects.get(pk = 1).STAKEHOLDERSのようなモデルを定義することは可能ですか?その特定の項目のすべての利害関係者を得ますか?

いくつか追加の詳細:ITEMとステークホルダーのデータを取得するためにカスタムSQLを使用します。

答えて

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

これは既定のデータベースでは機能しますが、2番目のレガシーデータベースを使用してもこれが機能しますか? – Dasith

+0

@Dasith例えば、データベースAに属する 'Item'とデータベースBに属する' stakeholder 'を意味しますか? – lucasnadalutti

+0

いいえ、どちらも同じデータベースですが、カスタムSQLを使用してモデル内のデータを取得します。 – Dasith

関連する問題