General cleanup of tables

This commit is contained in:
Jeremy Stretch 2020-09-25 14:18:29 -04:00
parent 28f0da0bc1
commit 12e2537222
7 changed files with 27 additions and 106 deletions

View File

@ -24,19 +24,6 @@ MPTT_LINK = """
</span> </span>
""" """
SITE_REGION_LINK = """
{% if record.region %}
<a href="{% url 'dcim:site_list' %}?region={{ record.region.slug }}">{{ record.region }}</a>
{% else %}
&mdash;
{% endif %}
"""
COLOR_LABEL = """
{% load helpers %}
<label class="label" style="color: {{ record.color|fgcolor }}; background-color: #{{ record.color }}">{{ record }}</label>
"""
DEVICE_LINK = """ DEVICE_LINK = """
<a href="{% url 'dcim:device' pk=record.pk %}"> <a href="{% url 'dcim:device' pk=record.pk %}">
{{ record.name|default:'<span class="label label-info">Unnamed device</span>' }} {{ record.name|default:'<span class="label label-info">Unnamed device</span>' }}
@ -49,39 +36,6 @@ RACKGROUP_ELEVATIONS = """
</a> </a>
""" """
RACKRESERVATION_ACTIONS = """
<a href="{% url 'dcim:rackreservation_changelog' pk=record.pk %}" class="btn btn-default btn-xs" title="Change log">
<i class="fa fa-history"></i>
</a>
{% if perms.dcim.change_rackreservation %}
<a href="{% url 'dcim:rackreservation_edit' pk=record.pk %}?return_url={{ request.path }}" class="btn btn-xs btn-warning"><i class="glyphicon glyphicon-pencil" aria-hidden="true"></i></a>
{% endif %}
"""
MANUFACTURER_ACTIONS = """
<a href="{% url 'dcim:manufacturer_changelog' slug=record.slug %}" class="btn btn-default btn-xs" title="Change log">
<i class="fa fa-history"></i>
</a>
{% if perms.dcim.change_manufacturer %}
<a href="{% url 'dcim:manufacturer_edit' slug=record.slug %}?return_url={{ request.path }}" class="btn btn-xs btn-warning"><i class="glyphicon glyphicon-pencil" aria-hidden="true"></i></a>
{% endif %}
"""
DEVICEROLE_ACTIONS = """
<a href="{% url 'dcim:devicerole_changelog' slug=record.slug %}" class="btn btn-default btn-xs" title="Change log">
<i class="fa fa-history"></i>
</a>
{% if perms.dcim.change_devicerole %}
<a href="{% url 'dcim:devicerole_edit' slug=record.slug %}?return_url={{ request.path }}" class="btn btn-xs btn-warning"><i class="glyphicon glyphicon-pencil" aria-hidden="true"></i></a>
{% endif %}
"""
DEVICE_PRIMARY_IP = """
{{ record.primary_ip6.address.ip|default:"" }}
{% if record.primary_ip6 and record.primary_ip4 %}<br />{% endif %}
{{ record.primary_ip4.address.ip|default:"" }}
"""
UTILIZATION_GRAPH = """ UTILIZATION_GRAPH = """
{% load helpers %} {% load helpers %}
{% utilization_graph value %} {% utilization_graph value %}
@ -149,8 +103,8 @@ class SiteTable(BaseTable):
order_by=('_name',) order_by=('_name',)
) )
status = ChoiceFieldColumn() status = ChoiceFieldColumn()
region = tables.TemplateColumn( region = tables.Column(
template_code=SITE_REGION_LINK linkify=True
) )
tenant = tables.TemplateColumn( tenant = tables.TemplateColumn(
template_code=COL_TENANT template_code=COL_TENANT
@ -206,7 +160,7 @@ class RackRoleTable(BaseTable):
pk = ToggleColumn() pk = ToggleColumn()
name = tables.Column(linkify=True) name = tables.Column(linkify=True)
rack_count = tables.Column(verbose_name='Racks') rack_count = tables.Column(verbose_name='Racks')
color = tables.TemplateColumn(COLOR_LABEL) color = ColorColumn()
actions = ButtonsColumn(RackRole) actions = ButtonsColumn(RackRole)
class Meta(BaseTable.Meta): class Meta(BaseTable.Meta):
@ -506,10 +460,7 @@ class DeviceRoleTable(BaseTable):
url_params={'role': 'slug'}, url_params={'role': 'slug'},
verbose_name='VMs' verbose_name='VMs'
) )
color = tables.TemplateColumn( color = ColorColumn()
template_code=COLOR_LABEL,
verbose_name='Label'
)
vm_role = BooleanColumn() vm_role = BooleanColumn()
actions = ButtonsColumn(DeviceRole, pk_field='slug') actions = ButtonsColumn(DeviceRole, pk_field='slug')
@ -577,9 +528,8 @@ class DeviceTable(BaseTable):
verbose_name='Type', verbose_name='Type',
text=lambda record: record.device_type.display_name text=lambda record: record.device_type.display_name
) )
primary_ip = tables.TemplateColumn( primary_ip = tables.Column(
template_code=DEVICE_PRIMARY_IP, linkify=True,
orderable=False,
verbose_name='IP Address' verbose_name='IP Address'
) )
primary_ip4 = tables.Column( primary_ip4 = tables.Column(

View File

@ -78,6 +78,12 @@ class ObjectChangeActionChoices(ChoiceSet):
(ACTION_DELETE, 'Deleted'), (ACTION_DELETE, 'Deleted'),
) )
CSS_CLASSES = {
ACTION_CREATE: 'success',
ACTION_UPDATE: 'primary',
ACTION_DELETE: 'danger',
}
# #
# Log Levels for Reports and Scripts # Log Levels for Reports and Scripts

View File

@ -152,3 +152,6 @@ class ObjectChange(models.Model):
self.object_repr, self.object_repr,
self.object_data, self.object_data,
) )
def get_action_class(self):
return ObjectChangeActionChoices.CSS_CLASSES.get(self.action)

View File

@ -1,6 +1,7 @@
import django_tables2 as tables import django_tables2 as tables
from django.conf import settings
from utilities.tables import BaseTable, BooleanColumn, ButtonsColumn, ColorColumn, ToggleColumn from utilities.tables import BaseTable, BooleanColumn, ButtonsColumn, ChoiceFieldColumn, ColorColumn, ToggleColumn
from .models import ConfigContext, ObjectChange, Tag, TaggedItem from .models import ConfigContext, ObjectChange, Tag, TaggedItem
TAGGED_ITEM = """ TAGGED_ITEM = """
@ -20,20 +21,6 @@ CONFIGCONTEXT_ACTIONS = """
{% endif %} {% endif %}
""" """
OBJECTCHANGE_TIME = """
<a href="{{ record.get_absolute_url }}">{{ value|date:"SHORT_DATETIME_FORMAT" }}</a>
"""
OBJECTCHANGE_ACTION = """
{% if record.action == 'create' %}
<span class="label label-success">Created</span>
{% elif record.action == 'update' %}
<span class="label label-primary">Updated</span>
{% elif record.action == 'delete' %}
<span class="label label-danger">Deleted</span>
{% endif %}
"""
OBJECTCHANGE_OBJECT = """ OBJECTCHANGE_OBJECT = """
{% if record.action != 3 and record.changed_object.get_absolute_url %} {% if record.action != 3 and record.changed_object.get_absolute_url %}
<a href="{{ record.changed_object.get_absolute_url }}">{{ record.object_repr }}</a> <a href="{{ record.changed_object.get_absolute_url }}">{{ record.object_repr }}</a>
@ -91,12 +78,11 @@ class ConfigContextTable(BaseTable):
class ObjectChangeTable(BaseTable): class ObjectChangeTable(BaseTable):
time = tables.TemplateColumn( time = tables.DateTimeColumn(
template_code=OBJECTCHANGE_TIME linkify=True,
) format=settings.SHORT_DATETIME_FORMAT
action = tables.TemplateColumn(
template_code=OBJECTCHANGE_ACTION
) )
action = ChoiceFieldColumn()
changed_object_type = tables.Column( changed_object_type = tables.Column(
verbose_name='Type' verbose_name='Type'
) )

View File

@ -78,14 +78,6 @@ VRF_LINK = """
{% endif %} {% endif %}
""" """
STATUS_LABEL = """
{% if record.pk %}
<span class="label label-{{ record.get_status_class }}">{{ record.get_status_display }}</span>
{% else %}
<span class="label label-success">Available</span>
{% endif %}
"""
VLAN_LINK = """ VLAN_LINK = """
{% if record.pk %} {% if record.pk %}
<a href="{{ record.get_absolute_url }}">{{ record.vid }}</a> <a href="{{ record.get_absolute_url }}">{{ record.vid }}</a>
@ -130,12 +122,6 @@ VLAN_MEMBER_TAGGED = """
{% endif %} {% endif %}
""" """
VLAN_MEMBER_ACTIONS = """
{% if perms.dcim.change_interface %}
<a href="{% if record.device %}{% url 'dcim:interface_edit' pk=record.pk %}{% else %}{% url 'virtualization:vminterface_edit' pk=record.pk %}{% endif %}" class="btn btn-xs btn-warning"><i class="glyphicon glyphicon-pencil"></i></a>
{% endif %}
"""
TENANT_LINK = """ TENANT_LINK = """
{% if record.tenant %} {% if record.tenant %}
<a href="{% url 'tenancy:tenant' slug=record.tenant.slug %}" title="{{ record.tenant.description }}">{{ record.tenant }}</a> <a href="{% url 'tenancy:tenant' slug=record.tenant.slug %}" title="{{ record.tenant.description }}">{{ record.tenant }}</a>
@ -587,15 +573,11 @@ class VLANMembersTable(BaseTable):
template_code=VLAN_MEMBER_TAGGED, template_code=VLAN_MEMBER_TAGGED,
orderable=False orderable=False
) )
actions = tables.TemplateColumn(
template_code=VLAN_MEMBER_ACTIONS,
attrs={'td': {'class': 'text-right noprint'}},
verbose_name=''
)
class VLANDevicesTable(VLANMembersTable): class VLANDevicesTable(VLANMembersTable):
device = tables.LinkColumn() device = tables.LinkColumn()
actions = ButtonsColumn(Interface, buttons=['edit'])
class Meta(BaseTable.Meta): class Meta(BaseTable.Meta):
model = Interface model = Interface
@ -604,6 +586,7 @@ class VLANDevicesTable(VLANMembersTable):
class VLANVirtualMachinesTable(VLANMembersTable): class VLANVirtualMachinesTable(VLANMembersTable):
virtual_machine = tables.LinkColumn() virtual_machine = tables.LinkColumn()
actions = ButtonsColumn(VMInterface, buttons=['edit'])
class Meta(BaseTable.Meta): class Meta(BaseTable.Meta):
model = VMInterface model = VMInterface

View File

@ -197,7 +197,7 @@ class ColorColumn(tables.Column):
""" """
def render(self, value): def render(self, value):
return mark_safe( return mark_safe(
'<span class="label color-block" style="background-color: #{}">&nbsp;</span>'.format(value) f'<span class="label color-block" style="background-color: #{value}">&nbsp;</span>'
) )

View File

@ -7,12 +7,6 @@ from utilities.tables import (
) )
from .models import Cluster, ClusterGroup, ClusterType, VirtualMachine, VMInterface from .models import Cluster, ClusterGroup, ClusterType, VirtualMachine, VMInterface
VIRTUALMACHINE_PRIMARY_IP = """
{{ record.primary_ip6.address.ip|default:"" }}
{% if record.primary_ip6 and record.primary_ip4 %}<br />{% endif %}
{{ record.primary_ip4.address.ip|default:"" }}
"""
# #
# Cluster types # Cluster types
@ -113,10 +107,9 @@ class VirtualMachineDetailTable(VirtualMachineTable):
linkify=True, linkify=True,
verbose_name='IPv6 Address' verbose_name='IPv6 Address'
) )
primary_ip = tables.TemplateColumn( primary_ip = tables.Column(
orderable=False, linkify=True,
verbose_name='IP Address', verbose_name='IP Address'
template_code=VIRTUALMACHINE_PRIMARY_IP
) )
tags = TagColumn( tags = TagColumn(
url_name='virtualization:virtualmachine_list' url_name='virtualization:virtualmachine_list'