2013-01-21 2 views
1

dynamic models에서 생성 된 두 개 이상의 테이블 (django-tables2에 의해 생성됨)을 병합 할 수있는 가능성이 있습니다.django-tables2와 동적 모델의 병합 테이블

은 내가 먼저 내 문제에 대해 설명하자

을 나는이 동적으로 생성 된 모델에 대한 다음과 같은 필드 :

동적 처리가 중복 모델을 정의하지 않고 내 테이블, structered 저장하기 위해 나에게 가능성을 제공
... 
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 ...'입니다.

이것은 모델 부분입니다. 나는이 같은 장고 - 테이블 2 클래스를 정의 할 수 있도록,

각 모델/테이블 주 일부 열/필드 :

그에 따르면 나를 장고 - 테이블 2을 사용하여 테이블 구조를 설명하자 :

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) 
,745 : 다른

class Table_A(tables.Table): 
    colA = tables.Column() 
    colB = tables.Column() 

필드는 단순히 상속을 사용하여 처리 될 수있다

생성자는 모델마다 다른 필드에 다른 column-name-prefix를 제공합니다. , 콜라, COLB, myDynamicModelA_tablename_colC에 대한

표를 myDynamicModelA_tablename_colD :

열을 'myDynamicModelA_tablename'에 대한

테이블 :

는 이제 다른 모델 예에서 테이블을 생성 할 수 있습니다 'myGenericModelB_tablename':

columns : colA, colB, myDynamicModelB_ta blename_colC, myDynamicModelB_tablename_colD

...

지금 내 질문 : 내가 그런 일받을 수 있도록 두 테이블을 병합 할 수 있습니다 :

콜라, COLB, myDynamicModelA_tablename_colC, myDynamicModelB_tablename_colC, myDynamicModelA_tablename_colD이 표시됩니다

값을 myDynamicModelB_tablename_colD을해야 테이블 간 교차 결과 (이는 기본 키으로 해석 될 수있는 colA의 공통 값 때문에 가능합니다)

페이지 정렬을 제공 할뿐만 아니라 정렬 옵션을 제공하기 때문에 결과는 django-tables2 개체입니다.

내 설명을 이해할 수 있었으면 좋겠다.

많은 시간과 도움에 감사드립니다.

답변

2

아마이 prev question and answer 내 도움이 될 것입니다?

나는 원시 SQL을 통해 결합하여 동적으로 생성 된 테이블의 데이터에 액세스하고 순서 실제로 열이 렌더링되는, 메타 클래스를 정의를 지정하려면 장고 - 테이블 2

에 렌더링이 데이터를 전송 아래의 그림과 같이 ('시퀀스'는 열의 순서이며, nb '...'는 '및 모든 다른 열'을 의미합니다.) 테이블 2의 documentary을 확인하십시오. [열 위치를 바꿔보기]를 검색하십시오.) :

def getTable(table_name): 
    cursor = runSQL(table_name,""" 
     SELECT * FROM subscription_exptinfo,%s 
     WHERE %s.id = subscription_exptinfo.id 
     ;""" %(table_name,table_name)) 

    exptData = dictfetchall(cursor) 

    class Meta: 
     attrs = {'class': 'paleblue'} 
     sequence = ('id','...')    


    attrs = {} 
    attrs['Meta'] = Meta 
    cols=exptData[0] 

    for item in cols: 
     if item=='timeStart': 
      attrs[str(item)] = tables.DateTimeColumn(format='d-m-Y g:i:s',short=False) 
     else: 
      attrs[str(item)] = tables.Column() 


    myTable = type('myTable', (TableReport,), attrs) 

    #TableOptions(table).sequence = ["Id","..."] 
    #print ".........................." + str(TableOptions(table).sequence) 


    return myTable(exptData)