1
0
mirror of https://github.com/netbox-community/netbox.git synced 2024-05-10 07:54:54 +00:00

Initial work on cable paths (WIP)

This commit is contained in:
Jeremy Stretch
2020-09-30 15:07:56 -04:00
parent 12e2537222
commit 587e6fcf72
9 changed files with 239 additions and 101 deletions

View File

@@ -14,6 +14,9 @@ from taggit.managers import TaggableManager
from dcim.choices import *
from dcim.constants import *
from dcim.fields import PathField
from dcim.managers import CablePathManager
from dcim.utils import path_node_to_object
from extras.models import ChangeLoggedModel, ConfigContextModel, CustomFieldModel, TaggedItem
from extras.utils import extras_features
from utilities.choices import ColorChoices
@@ -25,6 +28,7 @@ from .device_components import *
__all__ = (
'Cable',
'CablePath',
'Device',
'DeviceRole',
'DeviceType',
@@ -1154,6 +1158,44 @@ class Cable(ChangeLoggedModel, CustomFieldModel):
return COMPATIBLE_TERMINATION_TYPES[self.termination_a._meta.model_name]
class CablePath(models.Model):
"""
An array of objects conveying the end-to-end path of one or more Cables.
"""
origin_type = models.ForeignKey(
to=ContentType,
on_delete=models.CASCADE,
related_name='+'
)
origin_id = models.PositiveIntegerField()
origin = GenericForeignKey(
ct_field='origin_type',
fk_field='origin_id'
)
destination_type = models.ForeignKey(
to=ContentType,
on_delete=models.CASCADE,
related_name='+',
blank=True,
null=True
)
destination_id = models.PositiveIntegerField(
blank=True,
null=True
)
destination = GenericForeignKey(
ct_field='destination_type',
fk_field='destination_id'
)
path = PathField()
objects = CablePathManager()
def __str__(self):
path = ', '.join([str(path_node_to_object(node)) for node in self.path])
return f"Path #{self.pk}: {self.origin} to {self.destination} via ({path})"
#
# Virtual chassis
#