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()