Я пишу приложение Django, которое будет отслеживать изменения в моделях, аналогично интерфейсу администратора. Например, я смогу отобразить список изменений в модели, которые выглядят примерно так: Changed Status from Open to Closed
.
Для этого я использую сигнал pre_save, сравнивая соответствующие поля между существующим элементом в базе данных и «экземпляром», который сохраняется. Чтобы получить существующий предмет, я должен сделать sender._default_manager.get(pk=sender.pk)
, который кажется немного грязным, но эта часть работает.
Проблема в том, что представление об изменении этой модели дважды вызывает метод save()
в форме (сначала с commit = False) - это означает, что 2 изменения регистрируются в базе данных, так как сигнал pre_save излучается дважды.
Есть ли способ, которым я могу это сделать? Может быть, совсем по-другому, хотя я помню, что читал, что приложение администратора Django использует сигналы для отслеживания изменений, которые вносят пользователи.