2013-05-22 10 views
7

Django projemde hangi sütunların dinamik olduğunu ve veritabanında ne olduğuna bağlı olması gerektiğini görmem gerekiyor. Bu yüzden here'da bir çözüm buldum ve küçük bir sorunla çalışıyor. Böyle views.py bir tablo yaratıyorumDjango-tables2 - tabloya dinamik olarak sütun ekleme - tablo etiketine eklenmiyor html

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

: Burada

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 

Ve sınıfını genişleten yöntem olup: İşte dinamik uzatıyorum bir tabloyla sınıf var: Her zaman istediğim gibi

table = define_table(roles)(queryset) 

tablo sütunları gösterir, ancak html kodu ben attrs gözardı görüyoruz:

{"class": "paleblue", "orderable":"True", "width":"100%"} 

Bu yüzden, benim için önemli olan paleblue için css stili yok. Meta sınıfı ile bir şey olabileceğini hissediyorum, ancak alanlar ve model çalışıyor, bu yüzden neden attrs bir fikrim yok.

cevap

6

Django-tables2'de her şeyden önce meta options are not inherited. Böylece, bir şeyin uygun olup olmadığını görmek için konuyla ilgili olarak açıklanan geçici çözümleri kontrol edebilir veya dinamik tablonuza bir Meta sınıfı ekleyebilirsin. Bunu yapmak için aşağıdakileri yapabilirsiniz bu gibi define_table yöntemi:

Oops fazla iki yıl sonra benim kodunda bir hata olduğunu fark
 
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 

- Yukarıda return klass önce hattını klass = type('DynamicTable', (ClientsTable,), attrs) içerecek şekilde unutmuştum. Şimdi, tamlık için ekliyorum.

+0

Güzel şeyler:

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

adresinden API belgelerine bakın! Sorunumu tam olarak ele almadım, ancak sorunumu çözmek için pasajınızı değiştirebilir ve Python türünü ve meta sınıfı eylemi hakkında çok şey öğrendim. Bir demet! – schwobaseggl

+0

Yardım ettim sevindim! Http://spapas.github.io/category/django.html: Blogumda yazı ile çeşitli şeyler yazdım. – Serafeim