Support setting cable terminations from serialized CableTermination IDs
Some checks failed
CI / build (20.x, 3.10) (push) Has been cancelled
CI / build (20.x, 3.11) (push) Has been cancelled
CI / build (20.x, 3.12) (push) Has been cancelled

This commit is contained in:
Jeremy Stretch
2025-09-09 09:11:00 -04:00
parent 43492181d4
commit 0402dce4c4

View File

@@ -146,12 +146,19 @@ class Cable(PrimaryModel):
"""
if side not in (CableEndChoices.SIDE_A, CableEndChoices.SIDE_B):
raise ValueError("Unknown cable side: {side")
public_attr = f'{side.lower()}_terminations'
private_attr = f'_{public_attr}'
_attr = f'_{side.lower()}_terminations'
if not self.pk or getattr(self, public_attr) != list(value):
# If the provided value is a list of CableTermination IDs, resolve them
# to their corresponding termination objects.
if all(isinstance(item, int) for item in value):
value = [
ct.termination for ct in CableTermination.objects.filter(pk__in=value).prefetch_related('termination')
]
if not self.pk or getattr(self, _attr, []) != list(value):
self._terminations_modified = True
setattr(self, private_attr, value)
setattr(self, _attr, value)
@property
def a_terminations(self):