μ§ν μ€μΈ λͺ¨λ λ©ν λ§μ λ‘ μΈν΄ νμ¬ λ€μμ μ¬μ©νκ³ μμ΅λλ€.
class StatsTable(tables.Table):
class Meta:
orderable = False
attrs = {'class': 'tablesorter'}
def __init__(self, form, request, *args, **kwargs):
rf_values = form.get_values()
rf_annotations = form.get_annotations()
rf_filter = form.get_filter()
rf_calculations = form.get_calculations()
data = list(
HourlyStat.objects.filter(**rf_filter).values(*rf_values).annotate(**rf_annotations).order_by('-clicks')
)
super(StatsTable, self).__init__(data, *args, **kwargs)
columns = rf_values + rf_annotations.keys() + rf_calculations
for col in columns:
self.base_columns[col] = tables.Column()
μ€μ λ‘ μ΄λ κ² μ¬μ©νλ κ²½μ°μ μ μΌν λ¬Έμ λ μ€κ°μ μμ΄μΌ νλ λ§μ§λ§ super()λ₯Ό νΈμΆν μ μλ€λ μ¬μ€μ λλ€. λ©ν ν΄λμ€κ° μ€μ λ‘ μ체μ μΌλ‘ base_columnsλ₯Ό μ°Ύμ§ μκ³ μμλ λͺ¨λΈμμλ§ μ°ΎκΈ° λλ¬ΈμΈ κ² κ°μ΅λλ€. μ€μ λ‘ μ΄κ²μ django νμμ self.fieldsλ³΄λ€ ν¨μ¬ μ§μ λΆν΄ 보μ λλ€.
μ΄μνλ€
self.base_columnsμ λμ μ΄μ μΆκ°νμ¬ μΆκ°ν©λλ€.
self.base_columns['column_name'] = tables.Column()
λ΄κ° μ±κ°μ ν κ°μ§λ κ·Έλ κ²ν¨μΌλ‘μ¨ μΈμ€ν΄μ€ μμ±μ΄ μλ ν΄λμ€ μμ±μ μμ νλ―λ‘ μμ²μ μΆκ°νλ λͺ¨λ μ΄μ΄ ν μ΄λΈμ λν λͺ¨λ νμ μμ²μ νμλλ©° λ΄κ° μ°Ύμ μ€μ λμ μ΄μ λν μ루μ μ λλ€. μλ€:
class ComponenteContableColumns(tables.Table):
"""Table that shows ComponentesContables as columns."""
a_static_columns = tables.Column()
def __init__(self, *args, **kwargs):
# Create a copy of base_columns to restore at the end.
self._bc = copy.deepcopy(self.base_columns)
# Your dynamic columns added here:
if today is 'monday':
self.base_columns['monday'] = tables.Column()
if today is 'tuesday':
self.base_columns['tuesday'] = tables.Column()
super().__init__(*args, **kwargs)
# restore original base_column to avoid permanent columns.
type(self).base_columns = self._bc
@jmfederico μ λμΌν λ¬Έμ κ° μμΌλ©° μ μλ ν΄νΉ(ν΄κ²° λ°©λ²)μ μ μ리μ λ£μ΄μΌ νμ΅λλ€. ν μ΄λΈμ μ΄μ λμ μΌλ‘ μΆκ°νλ λ°©λ²μ λν λ λμ μ μμ΄ μμ΅λκΉ? 맨 μμ 쿼리μ λ μ§κ° μλ ν μ΄λΈμ΄ μμΌλ―λ‘ νν°λ§ λ°©λ²μ λ°λΌ λ μ§κ° λ λ§κ±°λ μ μ μ μμ΅λλ€. λλ μ κ°λ 쿼리μ μλ μΆκ° μ΄μ΄ μκ³ μ΄κ²μ΄ λμΌν λ¬Έμ μΈμ§ μμλΈ μ΄μ λ₯Ό νμ λμ ν΄κ²°ν μ μμμ΅λλ€.
μ°Έκ³ λ‘ μ¬κΈ° λ΄ ν μ΄λΈ ν΄λμ€κ° μμ΅λλ€.
class ActivitySummaryTable(TableWithRawData):
activity = tables.Column(verbose_name=_('Activity'), orderable=False)
# the rest of the columns will be added based on the filter provided
def __init__(self, extra_cols, *args, **kwargs):
"""Pass in a list of tuples of extra columns to add in the format (colunm_name, column)"""
# Temporary hack taken from: https://github.com/bradleyayers/django-tables2/issues/70 to avoid the issue where
# we got the same columns from the previous instance added back
# Create a copy of base_columns to restore at the end.
_bc = copy.deepcopy(self.base_columns)
for col_name, col in extra_cols:
self.base_columns[col_name] = col
super(ActivitySummaryTable, self).__init__(*args, **kwargs)
# restore original base_column to avoid permanent columns.
type(self).base_columns = _bc
class Meta:
attrs = {'class': 'table'}
order_by = ('activity',)
λ μ§λ₯Ό νν°λ§ν λ€μ λμ 2κ°μ λλ½λ λ μ§κ° μΆκ°λ μ
extra_columns
μΈμλ₯Ό μ¬μ©νμ¬ 817d711μμ μμ λ¨
κ°μ₯ μ μ©ν λκΈ
μ΄μνλ€
self.base_columnsμ λμ μ΄μ μΆκ°νμ¬ μΆκ°ν©λλ€.
λ΄κ° μ±κ°μ ν κ°μ§λ κ·Έλ κ²ν¨μΌλ‘μ¨ μΈμ€ν΄μ€ μμ±μ΄ μλ ν΄λμ€ μμ±μ μμ νλ―λ‘ μμ²μ μΆκ°νλ λͺ¨λ μ΄μ΄ ν μ΄λΈμ λν λͺ¨λ νμ μμ²μ νμλλ©° λ΄κ° μ°Ύμ μ€μ λμ μ΄μ λν μ루μ μ λλ€. μλ€: