動的モデルから 生成された 2 つ以上のテーブル ( django-tables2によって生成された) をマージできるようにしたいと考えています。
最初に私の問題を説明しましょう:
動的に生成されたモデルには次のフィールドがあります。
...
fields = {
'colA': models.IntegerField(),
'colB': models.IntegerField(),
'colC': models.IntegerField(),
'colD': models.IntegerField(),
}
...
動的処理により、冗長なモデル クラスを定義せずに、構造化されたテーブルを格納できます。
データベースに格納されたテーブルから派生したモデルの例:
myDynamicModelA = DataModels().create_model('myDynamicModelA_tablename')
myDynamicModelB = DataModels().create_model('myDynamicModelB_tablename')
myDynamicModelC = DataModels().create_model('myDynamicModelC_tablename')
myDynamicModelD = DataModels().create_model('myDynamicModelD_tablename')
....
'_tablename' はすべてのテーブルで共通に共有されます。異なるのは、接頭辞「myDynamicModel A,B,C...」です。
これはモデル部分です。
それによると、django-tables2を使用してテーブル構造を説明します。
各モデル/テーブルはいくつかの列/フィールドを共有するため、次のようにdjango-tables2クラスを定義できます。
class Table_A(tables.Table):
colA = tables.Column()
colB = tables.Column()
異なるフィールドは、継承を使用して簡単に処理できます。
class Table_B(Table_A):
colC = tables.Column()
colD = tables.Column()
def __init__(self, *args, **kwargs):
self.colname = kwargs['colname']
kwargs.pop('colname')
super(Table_B, self).__init__(*args, **kwargs)
for col in self.base_columns:
if col not in ['colA', 'colB']:
self.base_columns[col].verbose_name = '%s_%s' % (self.colname, col)
ご覧のとおり、コンストラクターは、モデル間で異なるフィールドに対して異なる列名プレフィックスを提供します。
さまざまなモデルからテーブルを生成できるようになりました。たとえば、次のようになります。
「myDynamicModelA_tablename」のテーブル:
列: colA、colB、myDynamicModelA_tablename_colC、myDynamicModelA_tablename_colD
「myGenericModelB_tablename」のテーブル:
列: colA、colB、myDynamicModelB_tablename_colC、myDynamicModelB_tablename_colD
...
今私の質問: 両方のテーブルをマージして、そのようなものを受け取ることは可能ですか?
colA、colB、myDynamicModelA_tablename_colC、myDynamicModelB_tablename_colC、myDynamicModelA_tablename_colD、myDynamicModelB_tablename_colD
表示される値は、テーブル間の交差の結果である必要があります (主キーとして解釈される colA からの共通の値のため、これは可能です)
ページネーションと並べ替えオプションを提供したいので、結果がdjango-tables2オブジェクトであることが必要です。
私の説明が理解できたと思いますが、そうでない場合は申し訳ありません。
お時間を割いてご協力いただき、誠にありがとうございました。