cables.py 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. import django_tables2 as tables
  2. from django_tables2.utils import Accessor
  3. from dcim.models import Cable
  4. from netbox.tables import NetBoxTable, columns
  5. from tenancy.tables import TenantColumn
  6. from .template_code import CABLE_LENGTH
  7. __all__ = (
  8. 'CableTable',
  9. )
  10. class CableTerminationsColumn(tables.TemplateColumn):
  11. def __init__(self, cable_end, *args, **kwargs):
  12. template_code = """
  13. {% for term in value.all %}
  14. {% if term.cable_end == '""" + cable_end + """' %}
  15. <a href="{{ term.termination.get_absolute_url }}">{{ term.termination }}</a>
  16. {% endif %}
  17. {% endfor %}
  18. """
  19. super().__init__(template_code=template_code, *args, **kwargs)
  20. def value(self, value):
  21. return ', '.join([str(t.termination) for t in value.all()])
  22. #
  23. # Cables
  24. #
  25. class CableTable(NetBoxTable):
  26. # termination_a_parent = tables.TemplateColumn(
  27. # template_code=CABLE_TERMINATION_PARENT,
  28. # accessor=Accessor('termination_a'),
  29. # orderable=False,
  30. # verbose_name='Side A'
  31. # )
  32. # rack_a = tables.Column(
  33. # accessor=Accessor('termination_a__device__rack'),
  34. # orderable=False,
  35. # linkify=True,
  36. # verbose_name='Rack A'
  37. # )
  38. # termination_b_parent = tables.TemplateColumn(
  39. # template_code=CABLE_TERMINATION_PARENT,
  40. # accessor=Accessor('termination_b'),
  41. # orderable=False,
  42. # verbose_name='Side B'
  43. # )
  44. # rack_b = tables.Column(
  45. # accessor=Accessor('termination_b__device__rack'),
  46. # orderable=False,
  47. # linkify=True,
  48. # verbose_name='Rack B'
  49. # )
  50. a_terminations = CableTerminationsColumn(
  51. cable_end='A',
  52. accessor=Accessor('terminations'),
  53. orderable=False,
  54. verbose_name='A Side'
  55. )
  56. b_terminations = CableTerminationsColumn(
  57. cable_end='B',
  58. accessor=Accessor('terminations'),
  59. orderable=False,
  60. verbose_name='B Side'
  61. )
  62. status = columns.ChoiceFieldColumn()
  63. tenant = TenantColumn()
  64. length = columns.TemplateColumn(
  65. template_code=CABLE_LENGTH,
  66. order_by=('_abs_length', 'length_unit')
  67. )
  68. color = columns.ColorColumn()
  69. tags = columns.TagColumn(
  70. url_name='dcim:cable_list'
  71. )
  72. class Meta(NetBoxTable.Meta):
  73. model = Cable
  74. fields = (
  75. 'pk', 'id', 'label', 'a_terminations', 'b_terminations', 'status', 'type', 'tenant', 'color', 'length',
  76. 'tags', 'created', 'last_updated',
  77. )
  78. default_columns = (
  79. 'pk', 'id', 'label', 'a_terminations', 'b_terminations', 'status', 'type',
  80. )