فهرست منبع

Introduce MPTTColumn to represent MPTT models

Jeremy Stretch 5 سال پیش
والد
کامیت
32501c96e5
5فایلهای تغییر یافته به همراه25 افزوده شده و 35 حذف شده
  1. 4 8
      netbox/dcim/tables/racks.py
  2. 2 7
      netbox/dcim/tables/sites.py
  3. 0 7
      netbox/dcim/tables/template_code.py
  4. 2 13
      netbox/tenancy/tables.py
  5. 17 0
      netbox/utilities/tables.py

+ 4 - 8
netbox/dcim/tables/racks.py

@@ -4,10 +4,10 @@ from django_tables2.utils import Accessor
 from dcim.models import Rack, Location, RackReservation, RackRole
 from tenancy.tables import TenantColumn
 from utilities.tables import (
-    BaseTable, ButtonsColumn, ChoiceFieldColumn, ColorColumn, ColoredLabelColumn, LinkedCountColumn, TagColumn,
-    ToggleColumn,
+    BaseTable, ButtonsColumn, ChoiceFieldColumn, ColorColumn, ColoredLabelColumn, LinkedCountColumn, MPTTColumn,
+    TagColumn, ToggleColumn,
 )
-from .template_code import MPTT_LINK, LOCATION_ELEVATIONS, UTILIZATION_GRAPH
+from .template_code import LOCATION_ELEVATIONS, UTILIZATION_GRAPH
 
 __all__ = (
     'RackTable',
@@ -24,11 +24,7 @@ __all__ = (
 
 class LocationTable(BaseTable):
     pk = ToggleColumn()
-    name = tables.TemplateColumn(
-        template_code=MPTT_LINK,
-        orderable=False,
-        attrs={'td': {'class': 'text-nowrap'}}
-    )
+    name = MPTTColumn()
     site = tables.Column(
         linkify=True
     )

+ 2 - 7
netbox/dcim/tables/sites.py

@@ -2,8 +2,7 @@ import django_tables2 as tables
 
 from dcim.models import Region, Site
 from tenancy.tables import TenantColumn
-from utilities.tables import BaseTable, ButtonsColumn, ChoiceFieldColumn, TagColumn, ToggleColumn
-from .template_code import MPTT_LINK
+from utilities.tables import BaseTable, ButtonsColumn, ChoiceFieldColumn, MPTTColumn, TagColumn, ToggleColumn
 
 __all__ = (
     'RegionTable',
@@ -17,11 +16,7 @@ __all__ = (
 
 class RegionTable(BaseTable):
     pk = ToggleColumn()
-    name = tables.TemplateColumn(
-        template_code=MPTT_LINK,
-        orderable=False,
-        attrs={'td': {'class': 'text-nowrap'}}
-    )
+    name = MPTTColumn()
     site_count = tables.Column(
         verbose_name='Sites'
     )

+ 0 - 7
netbox/dcim/tables/template_code.py

@@ -56,13 +56,6 @@ INTERFACE_TAGGED_VLANS = """
 {% endif %}
 """
 
-MPTT_LINK = """
-{% for i in record.get_ancestors %}
-    <i class="mdi mdi-circle-small"></i>
-{% endfor %}
-<a href="{{ record.get_absolute_url }}">{{ record.name }}</a>
-"""
-
 POWERFEED_CABLE = """
 <a href="{{ value.get_absolute_url }}">{{ value }}</a>
 <a href="{% url 'dcim:powerfeed_trace' pk=record.pk %}" class="btn btn-primary btn-xs" title="Trace">

+ 2 - 13
netbox/tenancy/tables.py

@@ -1,15 +1,8 @@
 import django_tables2 as tables
 
-from utilities.tables import BaseTable, ButtonsColumn, LinkedCountColumn, TagColumn, ToggleColumn
+from utilities.tables import BaseTable, ButtonsColumn, LinkedCountColumn, MPTTColumn, TagColumn, ToggleColumn
 from .models import Tenant, TenantGroup
 
-MPTT_LINK = """
-{% for i in record.get_ancestors %}
-    <i class="mdi mdi-circle-small"></i>
-{% endfor %}
-<a href="{{ record.get_absolute_url }}">{{ record.name }}</a>
-"""
-
 
 #
 # Table columns
@@ -42,11 +35,7 @@ class TenantColumn(tables.TemplateColumn):
 
 class TenantGroupTable(BaseTable):
     pk = ToggleColumn()
-    name = tables.TemplateColumn(
-        template_code=MPTT_LINK,
-        orderable=False,
-        attrs={'td': {'class': 'text-nowrap'}}
-    )
+    name = MPTTColumn()
     tenant_count = LinkedCountColumn(
         viewname='tenancy:tenant_list',
         url_params={'group': 'slug'},

+ 17 - 0
netbox/utilities/tables.py

@@ -287,3 +287,20 @@ class TagColumn(tables.TemplateColumn):
 
     def value(self, value):
         return ",".join([tag.name for tag in value.all()])
+
+
+class MPTTColumn(tables.TemplateColumn):
+    template_code = """{% for i in record.get_ancestors %}<i class="mdi mdi-circle-small"></i>{% endfor %}""" \
+                    """<a href="{{ record.get_absolute_url }}">{{ record.name }}</a>"""
+
+    def __init__(self, *args, **kwargs):
+        super().__init__(
+            template_code=self.template_code,
+            orderable=False,
+            attrs={'td': {'class': 'text-nowrap'}},
+            *args,
+            **kwargs
+        )
+
+    def value(self, value):
+        return value