2つのテーブルの情報を1つのDjangoモデルに結合します

アントニオO。

次の2つのテーブルを使用して、外部データベースのデータを読み取る必要があります(テーブル構造を変更できません)。

表1

  • キー(主キー)
  • フィールド1

表2

  • キー(主キー)
  • フィールド2

これらの2つのテーブルを次のような単一のDjangoモデルに結合することは可能ですか?

モデル:

  • キー(主キー)
  • フィールド1
  • フィールド2

追加情報:

Table2のエントリのキーは、Table1のエントリのサブセットです。したがって、Table2のエントリには、Table1に一致するエントリがありますが、その逆はありません。

これまでの作業:

テーブル(1と2)ごとに1つのモデルがあり、Table1モデルにはTable2モデルの対応する情報を検索する「field2」@propertyがあります。

また、次のクエリを使用してSQLレベルでこれを行うことができます。

SELECT
  table1.key,
  table1.field1,
  table2.field2,
FROM
  table1
    LEFT OUTER JOIN table2
      ON table1.key=table2.key
ORDER BY table1.key ASC

===いくつかの回答を見た後、ソリューション実装の詳細が更新されます。

ダニエル・ローズマンの答え

私は2つのモデルになりました:

class Model1(models.Model):
    key = models.CharField(max_length=100, primary_key=True)
    field1 = models.TextField()

    class Meta:
        managed = False
        db_table = 'Table1'

    def field2_value(self):
        try:
            return self.field2.value
        except Model2.DoesNotExist:
            return None


class Model2(models.Model):
    key = models.OneToOneField(Model1, primary_key=True, db_column='key',
                               related_name='field2')
    field2 = models.TextField()

    class Meta:
        managed = False
        db_table = 'Table2'

この質問をしたときに最初に考えていたものとは異なりますが、希望するユースケースを満たしています。

また、対応する管理クラスは次のとおりです。

class Model2Admin(admin.StackedInline):
    model = Model2


@admin.register(Model1)
class Model1Admin(admin.ModelAdmin):
    inlines = (Model2Admin,)
    list_display = ('key', 'field1', 'field2_value')
    # Loads the related property in one SQL call instead of one call per entry
    list_select_related = ('field2',)

素晴らしい回答をありがとうKaaNSARIKAYA2つのテーブルのビューを作成できることを知りませんでした。データベース構造を変更できる場合は、オプションを選択します。

ダニエルローズマン

より良い解決策は、これらを2つのモデルとして保持することですが、2番目の主キーを最初のモデルのOneToOneFieldにします。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

2つのテーブルを1つに結合します

分類Dev

mysqlで情報を1つのテーブルに結合し、別のテーブルに移動する

分類Dev

同じテーブルの2つを別のテーブルに結合し、同じ行の(同じ)テーブルの情報を出力します

分類Dev

2つのテーブルのmysqlデータを1つのテーブルに結合します

分類Dev

同じクエリで異なる情報を持つ2つのMySQLテーブルを結合します

分類Dev

2つのファイルの情報を1行ずつ結合します

分類Dev

PHPを使用してMySQLの2つの結合テーブルから情報を削除します

分類Dev

1つのテーブルの2つの列を別の参照テーブルの列に結合します

分類Dev

2つのテーブルのデータを1つの出力SQLに結合します

分類Dev

2つのテーブルのデータを1つのクラスに結合します

分類Dev

MySQL \ 2つのテーブルを結合し、1つの列に2行の結果を表示します

分類Dev

MySQL 2つのテーブルを結合し、複数の行を1つに結合します

分類Dev

MySQL:別のテーブルの2つの行を1つの結果行に結合します

分類Dev

テーブルの列を1つのテーブルに結合します

分類Dev

1つの列データを使用してテーブルの2つの行を結合します

分類Dev

データベースから2つのテーブルを選択し、1つのテーブルに結合された結果を取得します

分類Dev

SQL1つのテーブルデータを別のテーブルデータに結合します

分類Dev

ElixirEctoの2つのデータベースに属する2つのテーブルを結合します

分類Dev

2つのテーブルを1つに内部結合する

分類Dev

2つのc#データテーブルを1つに結合する

分類Dev

2つのデータテーブルの異なるcolumnNameを1つのデータテーブルに結合します

分類Dev

Laravelはモデルを使用して2つのデータベーステーブルを結合します

分類Dev

2つのテーブルを結合し、1つの列にテキスト値をマージします

分類Dev

SQLServer-テーブルを1つのテーブルに結合します

分類Dev

1つのセルに連結されたデータ。1つの情報が存在しない場合は、行全体を削除します

分類Dev

SQLServer2008。2つのテーブルから情報を取得し、行の値を連結します。

分類Dev

既知の情報を持つレールの結合テーブルからデータを取得する

分類Dev

2つの異なるmySql結果を1つのテーブルに結合します

分類Dev

1つのテーブルをカウントし、テーブル2の情報を結果にマージするSQL

Related 関連記事

  1. 1

    2つのテーブルを1つに結合します

  2. 2

    mysqlで情報を1つのテーブルに結合し、別のテーブルに移動する

  3. 3

    同じテーブルの2つを別のテーブルに結合し、同じ行の(同じ)テーブルの情報を出力します

  4. 4

    2つのテーブルのmysqlデータを1つのテーブルに結合します

  5. 5

    同じクエリで異なる情報を持つ2つのMySQLテーブルを結合します

  6. 6

    2つのファイルの情報を1行ずつ結合します

  7. 7

    PHPを使用してMySQLの2つの結合テーブルから情報を削除します

  8. 8

    1つのテーブルの2つの列を別の参照テーブルの列に結合します

  9. 9

    2つのテーブルのデータを1つの出力SQLに結合します

  10. 10

    2つのテーブルのデータを1つのクラスに結合します

  11. 11

    MySQL \ 2つのテーブルを結合し、1つの列に2行の結果を表示します

  12. 12

    MySQL 2つのテーブルを結合し、複数の行を1つに結合します

  13. 13

    MySQL:別のテーブルの2つの行を1つの結果行に結合します

  14. 14

    テーブルの列を1つのテーブルに結合します

  15. 15

    1つの列データを使用してテーブルの2つの行を結合します

  16. 16

    データベースから2つのテーブルを選択し、1つのテーブルに結合された結果を取得します

  17. 17

    SQL1つのテーブルデータを別のテーブルデータに結合します

  18. 18

    ElixirEctoの2つのデータベースに属する2つのテーブルを結合します

  19. 19

    2つのテーブルを1つに内部結合する

  20. 20

    2つのc#データテーブルを1つに結合する

  21. 21

    2つのデータテーブルの異なるcolumnNameを1つのデータテーブルに結合します

  22. 22

    Laravelはモデルを使用して2つのデータベーステーブルを結合します

  23. 23

    2つのテーブルを結合し、1つの列にテキスト値をマージします

  24. 24

    SQLServer-テーブルを1つのテーブルに結合します

  25. 25

    1つのセルに連結されたデータ。1つの情報が存在しない場合は、行全体を削除します

  26. 26

    SQLServer2008。2つのテーブルから情報を取得し、行の値を連結します。

  27. 27

    既知の情報を持つレールの結合テーブルからデータを取得する

  28. 28

    2つの異なるmySql結果を1つのテーブルに結合します

  29. 29

    1つのテーブルをカウントし、テーブル2の情報を結果にマージするSQL

ホットタグ

アーカイブ