Add deserialize_object() to Cable

This commit is contained in:
Jeremy Stretch
2025-09-05 14:34:20 -04:00
parent 48378c502f
commit f5e69e5457

View File

@@ -18,7 +18,7 @@ from utilities.conversion import to_meters
from utilities.exceptions import AbortRequest
from utilities.fields import ColorField, GenericArrayForeignKey
from utilities.querysets import RestrictedQuerySet
from utilities.serialization import serialize_object
from utilities.serialization import deserialize_object, serialize_object
from wireless.models import WirelessLink
from .device_components import FrontPort, RearPort, PathEndpoint
@@ -108,6 +108,8 @@ class Cable(PrimaryModel):
# Cache the original status so we can check later if it's been changed
self._orig_status = self.__dict__.get('status')
self._a_terminations = []
self._b_terminations = []
self._terminations_modified = False
# Assign or retrieve A/B terminations
@@ -251,6 +253,24 @@ class Cable(PrimaryModel):
return data
@classmethod
def deserialize_object(cls, data, pk=None):
a_terminations = data.pop('a_terminations', [])
b_terminations = data.pop('b_terminations', [])
instance = deserialize_object(cls, data, pk=pk)
# Assign A & B termination objects to the Cable instance
queryset = CableTermination.objects.prefetch_related('termination')
instance.a_terminations = [
ct.termination for ct in queryset.filter(pk__in=a_terminations)
]
instance.b_terminations = [
ct.termination for ct in queryset.filter(pk__in=b_terminations)
]
return instance
def get_terminations(self):
"""
Return two dictionaries mapping A & B side terminating objects to their corresponding CableTerminations