Сохранение журналов изменений базы данных в базу данных в django
Мне нужно сохранить журнал изменений некоторых таблиц в базу данных, чтобы администратор мог читать журналы и отслеживать действия пользователей. например, мне нужно сохранять логи изменений таблицы user с такой информацией: дата, время изменения, пользователь, который изменил информацию о пользователе (может быть сам пользователь или администратор), поля, которые изменились с их новыми значениями. Это мой код, проблема в том, что я не знаю, является ли это лучшей практикой, есть ли какой-нибудь пакет для этого, как я могу получить доступ к пользователю, который сделал изменения? и, конечно, это не только для таблицы пользователей.
class CustomUser(AbstractUser):
__pre_save_fields = {}
def _get_field_value_dict(self):
return {field.attname: getattr(self, field.attname, None) for field in self._meta.concrete_fields}
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.__pre_save_fields.update(self._get_field_value_dict())
def save(self, **kwargs):
in_memory_field_value_dict = self._get_field_value_dict()
changed_fields_new_value_dict = dict(
filter(lambda t: self.__pre_save_fields[t[0]] != t[1], in_memory_field_value_dict.items())
)
super().save(**kwargs)
self.__pre_save_fields.update(self._get_field_value_dict())
if changed_fields_new_value_dict:
UserChangeLog.objects.create(insert_edit_by_user_id=1, last_data=str(changed_fields_new_value_dict))
class UserChangeLog(models.Model):
datetime_created = models.DateTimeField(auto_now_add=True)
insert_edit_by_user = models.ForeignKey(AUTH_USER_MODEL, null=True, blank=True, on_delete=models.SET_NULL)
last_data = models.TextField()