Needed a function to check if any field in an instance has changed. If so update a datetime field to now to keep track of changes. This function is an override of the save function in the model.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | def save(self, latest_update_at):
changed = False
# if inserting don't add the latest update at
if self.id is None:
super(Match, self).save()
# otherwise check if any fields have changed
for field in self._meta.get_all_field_names():
if changed:
continue
old_value = getattr(self.__class__._default_manager.get(id=self.id), field)
new_value = getattr(self, field)
if new_value != old_value:
changed = True
if changed:
self.latest_update_at = datetime.now()
super(Match, self).save()
|
More like this
- Browser-native date input field by kytta 4 weeks ago
- Generate and render HTML Table by LLyaudet 1 month, 1 week ago
- My firs Snippets by GutemaG 1 month, 1 week ago
- FileField having auto upload_to path by junaidmgithub 2 months, 2 weeks ago
- LazyPrimaryKeyRelatedField by LLyaudet 2 months, 3 weeks ago
Comments
I think save() of the superclass is called twice when inserting (probably not what you want).
Also, the old object is retrieved from the database for every field. You probably want something like (untested):
Lastly, in most cases the
auto_now
property ofDateTimeField
should suffice.#
Please login first before commenting.