Django : Локальное сохранение экземпляра модели

Используя сигналы, я пытаюсь отследить разницу между старым экземпляром объекта и новым экземпляром при сохранении модели.

Я попробовал это :

enter image description here

Но логически в методе model_post_init_handler это ссылка на объект, который хранится в __original_instance. Таким образом, instance.__original_instance.is_used и instance.is_used всегда будут одним и тем же.

Как я

могу сохранить "снимок" объекта, когда он инициирован, чтобы я мог отследить, что было отредактировано?

UPDATE Приведенный выше метод функционален. Но он непрактичен: внешние ключи не управляются и ими нужно управлять вручную. Поскольку я буду использовать этот приемник для многих моделей, он будет прихотлив. Кроме того, мне не нравится json.loads(json.dumps()), который я использовал для преобразования OrderedDict, возвращаемого сериализатором, в dict.

@receiver(pre_save, sender=Document)
def model_pre_save_handler(sender, instance, **kwargs):
    model_dict = json.loads(json.dumps(sender().__serialize__(Document.objects.get(pk=instance.id)).data))
    model_dict['type'] = DocumentType.objects.get(pk=model_dict['type']['id'])
    instance.__original_instance = sender(**model_dict)
Библиотека

django_model_tracker делает это за вас. Вы можете ознакомиться с ней по адресу https://pypi.org/project/django-model-tracker/ и посмотреть учебник по адресу https://dev.to/mkalioby/tracking-database-changes-4kal

Вернуться на верх