From fd8a97cb3ec0b6e5d3847b2d734be3c4afd44f71 Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Mon, 5 Feb 2024 09:14:43 -0500 Subject: [PATCH] Refactor logic --- netbox/extras/signals.py | 25 ++++++++++--------------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/netbox/extras/signals.py b/netbox/extras/signals.py index 58d600f87..4c15e839a 100644 --- a/netbox/extras/signals.py +++ b/netbox/extras/signals.py @@ -68,25 +68,20 @@ def handle_changed_object(sender, instance, **kwargs): else: return - # Record an ObjectChange if applicable + # Create/update an ObejctChange record for this change objectchange = instance.to_objectchange(action) - resave_objectchange = False - if m2m_changed: - qs = ObjectChange.objects.filter( + # If this is a many-to-many field change, check for a previous ObjectChange instance recorded + # for this object by this request and update it + if m2m_changed and ( + prev_change := ObjectChange.objects.filter( changed_object_type=ContentType.objects.get_for_model(instance), changed_object_id=instance.pk, request_id=request.id - ) - if not qs: - resave_objectchange = True - else: - qs.update( - postchange_data=objectchange.postchange_data - ) - else: - resave_objectchange = True - - if resave_objectchange and objectchange and objectchange.has_changes: + ).first() + ): + prev_change.postchange_data = objectchange.postchange_data + prev_change.save() + elif objectchange and objectchange.has_changes: objectchange.user = request.user objectchange.request_id = request.id objectchange.save()