2013-05-22 9 views
7

में टेबल टैग में अटैचर्स नहीं जोड़ना मेरे Django प्रोजेक्ट में मुझे टेबल होना चाहिए जो कॉलम गतिशील हैं और डेटाबेस में क्या है इस पर निर्भर करते हैं। तो मुझे here में एक समाधान मिला और यह एक छोटी सी समस्या के साथ काम करता है।Django-tables2 - गतिशील रूप से तालिका में कॉलम जोड़ना - एचटीएमएल

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 

और यहाँ विधि उस वर्ग का विस्तार किया गया है::

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

जब मैं इस तरह views.py में एक तालिका बना रहा हूं यहाँ एक मेज मैं गतिशील विस्तार कर रहा हूँ के साथ वर्ग है: जैसे मैं चाहता था

table = define_table(roles)(queryset) 

तालिका स्तंभ दिखाता है, लेकिन एचटीएमएल कोड में मुझे लगता है कि यह attrs पर ध्यान नहीं दिया:

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

तो पालेब्लू के लिए कोई सीएसएस शैली नहीं है, जो मेरे लिए महत्वपूर्ण है। मुझे लगता है कि यह मेटा क्लास के साथ कुछ हो सकता है लेकिन फ़ील्ड और मॉडल काम कर रहे हैं, इसलिए मुझे नहीं पता कि एटर्स क्यों नहीं हैं।

उत्तर

6

सबसे पहले, meta options are not inherited django-table2 में। तो आप इस मुद्दे पर चर्चा किए गए वर्कअराउंड देख सकते हैं कि कुछ फिट बैठता है या आप अपनी गतिशील तालिका में मेटा क्लास जोड़ सकते हैं। ऐसा करने के लिए, आप कर सकते हैं इस तरह से अपनी define_table विधि:

 
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 दस्तावेज़ देखें! मेरी समस्या को बिल्कुल सही नहीं है, लेकिन मैं अपनी समस्या को हल करने के लिए अपने स्निपेट को संशोधित कर सकता हूं और पाइथन 'टाइप' और मेटा क्लास एक्शन के बारे में बहुत कुछ सीखा। Thx एक गुच्छा! – schwobaseggl

+0

खुशी मैंने मदद की! मैंने अपने ब्लॉग पर सामान के साथ विभिन्न पोस्ट भी लिखे हैं: http://spapas.github.io/category/django.html – Serafeim

3

किसी भी व्यक्ति के लिए यह देखने के लिए, django-tables2 1.10 से आप extra_columnsTable कन्स्ट्रक्टर को पास करके तालिका में गतिशील रूप से कॉलम जोड़ते हैं।

extra_columns एक कॉलम नाम और Column ऑब्जेक्ट को परिभाषित करने, टुपल्स की एक सूची होनी चाहिए, उदाहरण के लिए। http://django-tables2.readthedocs.io/en/latest/pages/api-reference.html#django_tables2.tables.Table

संबंधित मुद्दे