Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 27 additions & 0 deletions apps/api/plane/db/mixins.py
Original file line number Diff line number Diff line change
Expand Up @@ -188,3 +188,30 @@ def old_values(self) -> dict[str, Any]:
all non-deferred fields).
"""
return self._original_values

def save(self, *args: Any, **kwargs: Any) -> None:
"""
Override save to automatically capture changed fields and reset tracking.

Before saving, the current changed_fields are captured and stored in
_changes_on_save. After saving, the tracked fields are reset so
that subsequent saves correctly detect changes relative to the last
saved state, not the original load-time state.

Models that need to access the changed fields after save (e.g., for
syncing related models) can use self._changes_on_save.
"""
self._changes_on_save = self.changed_fields
super().save(*args, **kwargs)
self._reset_tracked_fields()

def _reset_tracked_fields(self) -> None:
"""
Reset the tracked field values to the current state.

This is called automatically after save() to ensure that subsequent
saves correctly detect changes relative to the last saved state,
rather than the original load-time state.
"""
self._original_values = {}
self._track_fields()
4 changes: 3 additions & 1 deletion apps/api/plane/db/models/issue.py
Original file line number Diff line number Diff line change
Expand Up @@ -513,10 +513,12 @@ def save(self, *args, **kwargs):
"comment_json": "description_json",
}

# Use _changes_on_save which is captured by ChangeTrackerMixin.save()
# before the tracked fields are reset
changed_fields = {
desc_field: getattr(self, comment_field)
for comment_field, desc_field in field_mapping.items()
if self.has_changed(comment_field)
if comment_field in self._changes_on_save
}

# Update description only if comment fields changed
Expand Down
Loading