рд╕рднреА рдореЗрдЯрд╛ рдореИрдЬрд┐рдХ рдЪрд▓ рд░рд╣реЗ рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг, рдореИрдВ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ:
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()
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореЗрд░реЗ рд╕рд╛рде рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рдореБрджреНрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдореИрдВ рдмрд╕ рд╕реБрдкрд░() рдХреЛ рдХреЙрд▓ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛, рдЗрд╕реЗ рдмреАрдЪ рдореЗрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдореБрдЭреЗ рдЗрд╕рдХрд╛ рдЕрдиреБрдорд╛рди рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдореЗрдЯрд╛ рдХреНрд▓рд╛рд╕ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмреЗрд╕_рдХреЙрд▓рдо рдХреА рддрд▓рд╛рд╢ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдмрд▓реНрдХрд┐ рдХреЗрд╡рд▓ рд╡рд┐рд░рд╛рд╕рдд рд╡рд╛рд▓реЗ рдореЙрдбрд▓ рдкрд░ рджреЗрдЦрддрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ 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 рдореЗрдВ рдЬреЛрдбрд╝рдХрд░ рдЧрддрд┐рд╢реАрд▓ рдХреЙрд▓рдо рдЬреЛрдбрд╝рддрд╛ рд╣реВрдВ:
рдПрдХ рдмрд╛рдд рдЬреЛ рдореБрдЭреЗ рдкрд░реЗрд╢рд╛рди рдХрд░рдиреЗ рд╡рд╛рд▓реА рд▓рдЧреА рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдРрд╕рд╛ рдХрд░рдиреЗ рд╕реЗ, рдореИрдВ рд╡рд░реНрдЧ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддрд╛ рд╣реВрдВ, рдЙрджрд╛рд╣рд░рдг рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рдирд╣реАрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЕрдиреБрд░реЛрдз рдкрд░ рдЬреЛ рднреА рдХреЙрд▓рдо рдЬреЛрдбрд╝рддрд╛ рд╣реВрдВ, рд╡рд╣ рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдмрд╛рдж рдХреЗ рдЕрдиреБрд░реЛрдз рдкрд░ рджрд┐рдЦрд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЧрддрд┐рд╢реАрд▓ рдХреЙрд▓рдо рдХрд╛ рд╕рдорд╛рдзрд╛рди рдореБрдЭреЗ рдорд┐рд▓рд╛ рдерд╛: