2013-05-22 2 views
7

내 Django 프로젝트에서 열이 동적이며 데이터베이스의 내용에 따라 달라지는 테이블이 있어야합니다. 그래서 here에 해결책을 찾았지만 약간의 문제 만 있지만 작동합니다. 나는이 같은 views.py에서 테이블을 만드는거야Django-tables2 - 동적으로 테이블에 열 추가 - html의 테이블 태그에 attrs를 추가하지 않음

def define_table(roles): 
    attrs = dict((r.name, tables.Column() for r in roles) 
    klass = type('DynamicTable', (ClientsTable,), attrs) 
    return klass 

: 여기

class ClientsTable(tables.Table): 
    class Meta: 
     model = Client 
     attrs = {"class": "paleblue", "orderable":"True", "width":"100%"} 
     fields = ('name',) 

    def __init__(self, *args, **kwargs): 
     super(ClientsTable, self).__init__(*args, **kwargs) 
     self.counter = itertools.count() 

    def render_row_number(self): 
     return '%d' % next(self.counter) 

    def render_id(self, value): 
     return '%s' % value 

그리고 클래스를 확장하는 방법입니다 : 여기에 동적으로 확장하고있어 테이블이 클래스는 다음과 같습니다 내가 원하는처럼

table = define_table(roles)(queryset) 

표는 열을 표시하지만 HTML 코드 나는 그것이 attrs에 무시 것을 볼 :

paleblue에는 CSS 스타일이 없으므로 나에게 중요합니다. 메타 클래스에서 뭔가있을 수 있다고 생각하지만 필드와 모델이 작동하므로 attrs가없는 이유는 알 수 없습니다.

답변

6

먼저 django-tables2에 meta options are not inherited이 있습니다. 따라서 문제에서 논의 된 해결 방법을 확인하여 무언가가 맞는지 또는 동적 테이블에 메타 클래스를 추가 할 수 있는지 확인할 수 있습니다. 그렇게하려면, 당신이 할 수있는이처럼 define_table 방법 :

아차 이상 2 년 내 코드에서 오류가 발생했습니다 것으로 나타났습니다
 
def define_table(roles): 
    attrs = dict((r.name, tables.Column() for r in roles) 
    attrs['Meta'] = type('Meta',(), dict(attrs={"class":"paleblue", "orderable":"True", "width":"100%"})) 
    return klass 

- 제가 위에서 return klass 전에 선 klass = type('DynamicTable', (ClientsTable,), attrs)을 포함 잊었다. 나는 그것을 완성하기 위해 지금 추가하고있다.

+0

멋진 물건 :

class MyTable(Table): static_column = Column() mytable = MyTable(extra_columns=[('dynamic_column', Column())] 

는의 API 문서를 참조하십시오! 내 문제를 정확히 다루지는 않지만 문제를 해결하기 위해 스 니펫을 수정하고 Python'type' 및 메타 클래스 동작에 대해 많은 것을 배웠습니다. Thx 한 덩어리! – schwobaseggl

+0

기쁜 마음으로 도와 줬어! 나는 또한 나의 blog에 유형을 가진 재료를하는 각종 포스트를 썼다 : http://spapas.github.io/category/django.html – Serafeim