| 71 | super(ChangeTrackingMixin, self).__setattr__(key, value) |
| 72 | |
| 73 | def record_changes(self, changed_by): |
| 74 | db.session.add(self) |
| 75 | db.session.flush() |
| 76 | changes = {} |
| 77 | for attr in inspect(self.__class__).column_attrs: |
| 78 | (col,) = attr.columns |
| 79 | if attr.key not in self.skipped_fields: |
| 80 | changes[col.name] = { |
| 81 | "previous": self._clean_values[col.name], |
| 82 | "current": getattr(self, attr.key), |
| 83 | } |
| 84 | |
| 85 | db.session.add( |
| 86 | Change( |
| 87 | object=self, |
| 88 | object_version=self.version, |
| 89 | user=changed_by, |
| 90 | change=changes, |
| 91 | ) |
| 92 | ) |