Сохранение журналов изменений базы данных в базу данных в 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()
Вернуться на верх