class TestTable(tables.Table): col = tables.LinkColumn('occupation', kwargs={"pk": A('col')}, attrs={"a": { "title": "Occupation Title" }})
class PersonTable(tables.Table): name = tables.LinkColumn('escaping', kwargs={'pk': A('pk')})
class Table(tables.Table): link = tables.LinkColumn('occupation', kwargs={'pk': 1}, default='xyz')
class SimpleTable(tables.Table): name = tables.LinkColumn('primerinfo', args=[A('pk')]) class Meta: model = Primer fields = ['name', 'project', 'length', 'modification_5', 'modification_3', 'modification_internal', 'sequence'] attrs = {"class": "paleblue"}
class ChemicalTable(tables.Table): """Table for the Chemical View.""" name = tables.LinkColumn( 'chemical_detail', accessor='name', ) wgk = tables.Column( verbose_name=_('WGK'), accessor='chemical.wgk.name', orderable=False, ) # Translators: This is an abbreviation for Storage Classes storage_class = tables.Column( verbose_name=_("SC"), accessor='chemical.storage_class.name', orderable=False, ) signal = tables.Column( empty_values=(), verbose_name=_("Signal"), orderable=False, ) supplier_set = tables.Column( empty_values=(), verbose_name=_("Supplier"), orderable=False, ) risks = RiskColumn( verbose_name=_("Risk Indication"), orderable=False, ) pictograms = PictoColumn( verbose_name=_("Pictogram"), orderable=False, ) def render_name(self, record): name = record.name url = reverse('chemical_detail', kwargs={'pk': record.chemical.id}) if record.polymorphic_ctype.model == u'synonym': r = u'<a href="{}"><em>{}</em></a>'.format(url, name) else: r = u'<a href="{}">{}</a>'.format(url, name) return mark_safe(r) def render_signal(self, record): s = record.chemical.signal if s == 'w' or s == u'w': r = u'<span class="label label-warning">%s</span>' % _("Warning") elif s == 'd' or s == u'd': r = u'<span class="label label-danger">%s</span>' % _("Danger") elif s == 'n' or s == u'n': r = u'<span class="label label-default">%s</span>' % _("No Signal") else: r = u'' return mark_safe(r) def render_supplier_set(self, record): suppliers = [] for consumer in record.chemical.consumer_set.all(): suppliers.append(consumer.supplier) return render_as_list(set(suppliers)) class Meta: model = models.Identifier attrs = {'class': "table table-bordered table-striped table-condensed"} order_by = ('name', ) fields = ( 'name', 'risks', 'pictograms', 'signal', 'storage_class', 'wgk', 'supplier_set', )
class RearPortDetailTable(DeviceComponentDetailTable): device = tables.LinkColumn() class Meta(DeviceComponentDetailTable.Meta, RearPortTable.Meta): pass
class GitRepositoryTable(BaseTable): pk = ToggleColumn() name = tables.LinkColumn() remote_url = tables.Column(verbose_name="Remote URL") token_rendered = tables.Column(verbose_name="Token") last_sync_time = tables.DateTimeColumn( empty_values=(), format=settings.SHORT_DATETIME_FORMAT, verbose_name="Sync Time") last_sync_user = tables.Column(empty_values=(), verbose_name="Sync By") class JobResultColumn(tables.TemplateColumn): def render(self, record, table, value, bound_column, **kwargs): if record.name in table.context.get("job_results", {}): table.context.update( {"result": table.context["job_results"][record.name]}) else: table.context.update({"result": None}) return super().render(record, table, value, bound_column, **kwargs) last_sync_status = JobResultColumn( template_name="extras/inc/job_label.html", verbose_name="Sync Status") provides = tables.TemplateColumn(GITREPOSITORY_PROVIDES) actions = ButtonsColumn(GitRepository, pk_field="slug", prepend_template=GITREPOSITORY_BUTTONS) class Meta(BaseTable.Meta): model = GitRepository fields = ( "pk", "name", "slug", "remote_url", "branch", "token_rendered", "provides", "last_sync_time", "last_sync_user", "last_sync_status", "actions", ) default_columns = ( "pk", "name", "remote_url", "branch", "provides", "last_sync_status", "actions", ) def render_last_sync_time(self, record): if record.name in self.context["job_results"]: return self.context["job_results"][record.name].completed return self.default def render_last_sync_user(self, record): if record.name in self.context["job_results"]: user = self.context["job_results"][record.name].user return user return self.default
class SecretSearchTable(SearchTable): device = tables.LinkColumn() class Meta(SearchTable.Meta): model = Secret fields = ('device', 'role', 'name', 'last_updated')
class GenericEntitiesTable(django_tables2.Table): id = django_tables2.LinkColumn() class Meta: model = model_class attrs = {"class": "table table-hover table-striped table-condensed"}
class F201RestoreTable(F201Table): class Meta(F201Table.Meta): attrs = {'class': "F201RestoreTable"} id = tables.LinkColumn('F201Detail', args=[A('pk')])
class ActionTable(tables.Table): """Class to render the list of actions per workflow. The Operations column is taken from another class to centralise the customisation. """ name = tables.Column(verbose_name=_('Name')) description_text = tables.Column(verbose_name=_('Description')) action_type = tables.TemplateColumn( template_name='action/includes/partial_action_type.html', verbose_name=_('Type')) last_executed_log = tables.LinkColumn( verbose_name=_('Last executed'), empty_values=['', None], viewname='logs:view', text=lambda record: simplify_datetime_str(record.last_executed_log. modified), kwargs={'pk': A('last_executed_log.id')}, attrs={'a': { 'class': 'spin' }}, ) # # Operatiosn available per action type (see partial_action_operations.html) # # Action type | Email | ZIP | URL | RUN | # ------------------------------------------------------------ # Personalized text | X | X | X | X | # Personalized canvas email | X | | | X | # Personalized JSON | | | ? | X | # Survey | | | X | X | # Todo List | | | X | X | # operations = OperationsColumn( verbose_name='', template_file='action/includes/partial_action_operations.html', template_context=lambda record: { 'id': record.id, 'action_tval': record.action_type, 'is_out': int(record.is_out), 'is_executable': record.is_executable, 'serve_enabled': record.serve_enabled }, ) def render_name(self, record): """Render name as a link with a potential flag.""" return render_to_string( 'action/includes/partial_action_name.html', context={ 'action_id': record.id, 'danger_msg': (record.get_row_all_false_count or not record.is_executable), 'action_name': record.name, }, ) class Meta(object): """Define model, fields and ordering.""" model = Action fields = ( 'name', 'description_text', 'action_type', 'last_executed_log', ) sequence = ( 'action_type', 'name', 'description_text', 'last_executed_log', ) exclude = ('content', 'serve_enabled', 'filter') attrs = { 'class': 'table table-hover table-bordered shadow', 'style': 'width: 100%;', 'id': 'action-table', }
class RosterTable(tables.Table): team_name = tables.LinkColumn( 'team', args=[A('team_name')], verbose_name="Team", attrs={'td': { 'class': 'rosterTableCell' }}, ) rank = tables.Column( verbose_name="Rank", attrs={'td': { 'class': 'rosterTableCell' }}, ) captain = tables.LinkColumn( 'player', args=[A('team_name'), A('captain')], orderable=False, verbose_name="Captain", attrs={'td': { 'class': 'rosterTableCell' }}, ) co_captain = tables.LinkColumn( 'player', args=[A('team_name'), A('co_captain')], orderable=False, verbose_name="Co-Captain", attrs={'td': { 'class': 'rosterTableCell' }}, ) member1 = tables.LinkColumn( 'player', args=[A('team_name'), A('member1')], orderable=False, verbose_name="Member", attrs={'td': { 'class': 'rosterTableCell' }}, ) member2 = tables.LinkColumn( 'player', args=[A('team_name'), A('member2')], orderable=False, verbose_name="Member", attrs={'td': { 'class': 'rosterTableCell' }}, ) member3 = tables.LinkColumn( 'player', args=[A('team_name'), A('member3')], orderable=False, verbose_name="Member", attrs={'td': { 'class': 'rosterTableCell' }}, ) member4 = tables.LinkColumn( 'player', args=[A('team_name'), A('member4')], orderable=False, verbose_name="Member", attrs={'td': { 'class': 'rosterTableCell' }}, ) member5 = tables.LinkColumn( 'player', args=[A('team_name'), A('member5')], orderable=False, verbose_name="Member", attrs={'td': { 'class': 'rosterTableCell' }}, ) member6 = tables.LinkColumn( 'player', args=[A('team_name'), A('member6')], orderable=False, verbose_name="Member", attrs={'td': { 'class': 'rosterTableCell' }}, ) server = tables.Column( verbose_name="Server", attrs={'td': { 'class': 'rosterTableCell' }}, ) class Meta: model = Roster sequence = ('team_name', 'rank', 'captain', 'co_captain', 'member1', 'member2', 'member3', 'member4', 'member5', 'member6', 'server') exclude = ('id', 'firstActive', 'daysActive', 'logo', 'abv') attrs = {'class': 'table'} row_attrs = { 'class': lambda record: 'diamond' if record.rank < 6 else 'gold' if record.rank < 21 and record.rank > 5 else 'silver' if record.rank > 20 else 'none' }
class ScheduleActionTable(tables.Table): """Table to show the email actions scheduled for a workflow.""" action = tables.LinkColumn( verbose_name=_('Action'), viewname='action:edit', text=lambda record: record.action.name, kwargs={'pk': A('action.id')}, attrs={ 'a': { 'class': 'spin', 'data-toggle': 'tooltip', 'title': _('Edit the action scheduled for execution'), }, }, ) operations = OperationsColumn( verbose_name='', orderable=False, template_file='scheduler/includes/partial_scheduler_operations.html', template_context=lambda record: {'id': record.id}, ) name = tables.Column(verbose_name=_('Name')) execute = tables.DateTimeColumn(verbose_name=_('Scheduled')) execute_until = tables.DateTimeColumn(verbose_name=_('Until')) status = tables.Column(verbose_name=_('Status'), accessor=A('get_status_display')) def render_name(self, record): """Render name as link.""" if record.operation_type == ScheduledOperation.ACTION_RUN: return format_html( '<a href="{0}" data-toggle="tooltip" title="{1}">{2}</a>', reverse('scheduler:edit_scheduled_operation', kwargs={'pk': record.id}), _('Edit this scheduled action execution'), record.name) return 'REVIEW ScheduleActionTable' def render_status(self, record): """Render status as a link.""" log_item = record.last_executed_log if not log_item: return record.get_status_display() # At this point, the object is not pending. Produce a link return format_html('<a class="spin" href="{0}">{1}</a>', reverse('logs:view', kwargs={'pk': log_item.id}), record.get_status_display()) class Meta: """Choose model, fields and sequence in the table.""" model = ScheduledOperation fields = ('name', 'workflow', 'action', 'execute', 'execute_until', 'status') sequence = ('name', 'workflow', 'action', 'execute', 'execute_until', 'status', 'operations') attrs = { 'class': 'table table-hover table-bordered shadow', 'style': 'width: 100%;', 'id': 'scheduler-table' }
class jdTable(tables.Table): jd_id = tables.LinkColumn('results',text='Search')
class ConsoleServerPortDetailTable(DeviceComponentDetailTable): device = tables.LinkColumn() class Meta(DeviceComponentDetailTable.Meta, ConsoleServerPortTable.Meta): pass
class ItemTable(tables.Table): name = tables.LinkColumn() class Meta: model = Item attrs = {'class': 'paleblue'}
class PowerOutletDetailTable(DeviceComponentDetailTable): device = tables.LinkColumn() class Meta(DeviceComponentDetailTable.Meta, PowerOutletTable.Meta): pass
class EventTable(tables.Table): name = tables.LinkColumn("events:update", args=[A("pk")]) class Meta: model = Event fields = ( "name", "date", "type", "score", "description", "members", "pledges", "alumni", "duration", "stem", "host", "virtual", "miles", "raised", ) attrs = {"class": "table table-striped table-bordered"} empty_text = "There are no events matching the search criteria..." def __init__(self, natoff=False, *args, **kwargs): extra_columns = [] if natoff: remove = [ "score", "members", "pledges", "alumni", "duration", "stem", "host", "virtual", "miles", "raised", ] for key in remove: self.base_columns[key].visible = False extra_columns.extend([ ("chapter", tables.Column("Chapter")), ("chapter.region", tables.Column("Region")), ("pictures", tables.Column("Pictures")), ]) kwargs["extra_columns"] = extra_columns super().__init__(*args, **kwargs) def render_pictures(self, value): out = "" pictures = value.all() if pictures: for picture in pictures: if picture.image.name: value = ( f'<a title="{picture.description}" href="{picture.image.url}" target="_blank">' f'<img src="{picture.image.url}" width="150" height="150"/></a>' ) out += value return mark_safe(out)
class TenantSearchTable(SearchTable): name = tables.LinkColumn() class Meta(SearchTable.Meta): model = Tenant fields = ('name', 'group', 'description')
class UserTable(SciriusTable): username = tables.LinkColumn('user', args=[tables.A('pk')]) class Meta(DefaultMeta): model = User fields = ("username", "first_name", "last_name", "email", "is_staff", "is_superuser", "is_active")
class PersonTable(tables.Table): first_name = tables.LinkColumn('collection:change', args=(A('pk'), )) class Meta: model = Person fields = ('first_name', 'reminder')
class TransactionDetailTable(tables.Table): action = tables.LinkColumn('accounts:generate_receipt', text='Print', kwargs={'pk': A('transactDet_id')}, orderable=False, empty_values=(), attrs={ "a": { "class": "btn btn-outline-success" }, "tf": { "class": "bold_large", "align": "right" }, "td": { "align": "right" }, "th": { "style": "text-align:right" } }) # https://stackoverflow.com/questions/49854515/using-django-tables-2-how-do-you-cut-off-a-long-text-field-with-an-ellipsis transactDet_desc = tables.TemplateColumn( '<data-toggle="tooltip" title="{{record.transactDet_desc}}">{{record.transactDet_desc|truncatechars:10}}', footer="Total", attrs={"tf": { "class": "bold_large" }}) rm = tables.Column( footer=lambda table: round(sum(x.rm for x in table.data if x.rm), 2), empty_values=["0.00"], attrs={ "tf": { "class": "bold_large", "align": "right" }, "td": { "align": "right" }, "th": { "style": "text-align:right" } }) def render_rm(self, record): if record.rm: return '{:0.2f}'.format(record.rm) else: return "0.00" usd = tables.Column( footer=lambda table: round(sum(x.usd for x in table.data if x.usd), 2), empty_values=["0.00"], attrs={ "tf": { "class": "bold_large", "align": "right" }, "td": { "align": "right" }, "th": { "style": "text-align:right" } }) def render_usd(self, record): if record.usd: return '{:0.2f}'.format(record.usd) else: return "0.00" rmb = tables.Column( footer=lambda table: round(sum(x.rmb for x in table.data if x.rmb), 2), empty_values=["0.00"], attrs={ "tf": { "class": "bold_large", "align": "right" }, "td": { "align": "right" }, "th": { "style": "text-align:right" } }) def render_rmb(self, record): if record.rmb: return '{:0.2f}'.format(record.rmb) else: return "0.00" class Meta: model = TransactionDetails template_name = 'django_tables2/bootstrap4.html' exclude = ['transactDet_id', 'transaction'] orderable = False
class SDSTable(tables.Table): """Table listing safety data sheets.""" sds = tables.Column( empty_values=(), orderable=False, verbose_name=_("SDS"), ) esds = tables.FileColumn( empty_values=(), orderable=False, verbose_name=_("eSDS"), ) chemical = tables.LinkColumn( 'chemical_detail', verbose_name=_("Chemical"), accessor='chemical.name', order_by=('chemical.name_lower'), ) risks = RiskColumn( verbose_name=_("Risks"), orderable=False, ) pictograms = PictoColumn( verbose_name=_("Pictograms"), orderable=False, ) supplier = tables.Column( verbose_name=_("Supplier"), orderable=False, ) def render_chemical(self, record): name = record['chemical'] url = reverse('chemical_detail', kwargs={'pk': name.chemical.id}) if name.polymorphic_ctype.model == u'synonym': r = u'<a href="{}"><em>{}</em></a>'.format(url, name.name) else: r = u'<a href="{}">{}</a>'.format(url, name.name) return mark_safe(r) def render_sds(self, record): chemical = record['chemical'].chemical supplier = record['supplier'] r = u'<ul class="list-unstyled">' for sds in chemical.safetydatasheet_set.filter(supplier=supplier): r += '<li style="margin-bottom:10px">{}</li>'.format( render_file_button(sds.file.url, sds.country_code.upper())) r += u'</ul>' return mark_safe(r) def render_esds(self, record): chemical = record['chemical'].chemical supplier = record['supplier'] r = u'<ul class="list-unstyled">' for sds in chemical.extendedsafetydatasheet_set.filter( supplier=supplier): r += '<li style="margin-bottom:10px">{}</li>'.format( render_file_button(sds.file.url, sds.country_code.upper())) r += u'</ul>' return mark_safe(r) def render_risks(self, record): chemical = record['chemical'].chemical return render_as_list(chemical.risks.all()) def render_pictograms(self, record): chemical = record['chemical'].chemical return render_as_list(chemical.pictograms.all()) class Meta: attrs = {'class': "table table-bordered table-striped table-condensed"}
class DeviceTable(StatusTableMixin, BaseTable): pk = ToggleColumn() name = tables.TemplateColumn(order_by=("_name", ), template_code=DEVICE_LINK) tenant = TenantColumn() site = tables.Column(linkify=True) rack = tables.Column(linkify=True) device_role = ColoredLabelColumn(verbose_name="Role") device_type = tables.LinkColumn( viewname="dcim:devicetype", args=[Accessor("device_type__pk")], verbose_name="Type", text=lambda record: record.device_type.display, ) primary_ip = tables.Column(linkify=True, order_by=("primary_ip6", "primary_ip4"), verbose_name="IP Address") primary_ip4 = tables.Column(linkify=True, verbose_name="IPv4 Address") primary_ip6 = tables.Column(linkify=True, verbose_name="IPv6 Address") cluster = tables.LinkColumn(viewname="virtualization:cluster", args=[Accessor("cluster__pk")]) virtual_chassis = tables.LinkColumn(viewname="dcim:virtualchassis", args=[Accessor("virtual_chassis__pk")]) vc_position = tables.Column(verbose_name="VC Position") vc_priority = tables.Column(verbose_name="VC Priority") tags = TagColumn(url_name="dcim:device_list") class Meta(BaseTable.Meta): model = Device fields = ( "pk", "name", "status", "tenant", "device_role", "device_type", "platform", "serial", "asset_tag", "site", "rack", "position", "face", "primary_ip", "primary_ip4", "primary_ip6", "cluster", "virtual_chassis", "vc_position", "vc_priority", "tags", ) default_columns = ( "pk", "name", "status", "tenant", "site", "rack", "device_role", "device_type", "primary_ip", )
class DeviceTable(BaseTable): pk = ToggleColumn() name = tables.TemplateColumn(order_by=('_name', ), template_code=DEVICE_LINK) status = tables.TemplateColumn(template_code=STATUS_LABEL) tenant = tables.TemplateColumn(template_code=COL_TENANT) site = tables.Column(linkify=True) rack = tables.Column(linkify=True) device_role = ColoredLabelColumn(verbose_name='Role') device_type = tables.LinkColumn( viewname='dcim:devicetype', args=[Accessor('device_type__pk')], verbose_name='Type', text=lambda record: record.device_type.display_name) primary_ip = tables.TemplateColumn(template_code=DEVICE_PRIMARY_IP, orderable=False, verbose_name='IP Address') primary_ip4 = tables.Column(linkify=True, verbose_name='IPv4 Address') primary_ip6 = tables.Column(linkify=True, verbose_name='IPv6 Address') cluster = tables.LinkColumn(viewname='virtualization:cluster', args=[Accessor('cluster__pk')]) virtual_chassis = tables.LinkColumn(viewname='dcim:virtualchassis', args=[Accessor('virtual_chassis__pk')]) vc_position = tables.Column(verbose_name='VC Position') vc_priority = tables.Column(verbose_name='VC Priority') tags = TagColumn(url_name='dcim:device_list') class Meta(BaseTable.Meta): model = Device fields = ( 'pk', 'name', 'status', 'tenant', 'device_role', 'device_type', 'platform', 'serial', 'asset_tag', 'site', 'rack', 'position', 'face', 'primary_ip', 'primary_ip4', 'primary_ip6', 'cluster', 'virtual_chassis', 'vc_position', 'vc_priority', 'tags', ) default_columns = ( 'pk', 'name', 'status', 'tenant', 'site', 'rack', 'device_role', 'device_type', 'primary_ip', )
class TransactionTable(tables.Table): class Meta: model = Transaction template_name = "django_tables2/bootstrap.html" fields = ('stock','account','transaction_type', 'date', 'volume','price','tcost') stock = tables.LinkColumn("transaction_detail", args=[A("pk")])
class TestTable(tables.Table): col = tables.LinkColumn('occupation', kwargs={'pk': A('col')}, attrs={'a': {'title': 'Occupation Title'}})
class StockTable(tables.Table): class Meta: model = Stock template_name = "django_tables2/bootstrap.html" fields = ('nickname','code','yahoo_code','name', 'stock_type', 'current_price','price_updated','perf_5y','perf_3y','perf_1y','perf_6m','perf_3m','perf_1m') nickname = tables.LinkColumn("stock_detail", args=[A("pk")])
class PersonTable(tables.Table): first_name = tables.Column() last_name = tables.LinkColumn()
class PersonTable(tables.Table): name = tables.LinkColumn("escaping", kwargs={"pk": A("pk")})