Простая история Django Удалить всю историю на модели Удалить

Используя django simple history, есть ли способ удалить всю историю, связанную с объектом, если сам объект удален? Например, если у меня есть модель пользователя:

User.objects.filter(id=to_delete_id).delete()

Этот запрос удалит этого пользователя, но он не сотрет всю историю, которую я хотел бы сэкономить на стоимости данных. Есть ли способ автоматического удаления всей истории этого конкретного пользователя при удалении, или мне нужно сделать это:

User.objects.filter(id=to_delete_id).delete()
User.history.filter(id=to_delete_id).delete()

Благодарю.

1 ответ

Я думаю, что нашел решение, дайте мне знать, если это плохо по какой-то причине производительности:

Переопределите метод delete() для пользователя:

class User(...):
    ...
    def delete(self):
        self.history.filter().delete()
        super(User, self).delete()

Из документов: https://django-simple-history.readthedocs.io/en/2.7.0/historical_model.html

В некоторых случаях вы можете захотеть удалить все исторические записи при удалении основной записи. Это может быть достигнуто путем установки cascade_delete_history=True

class Poll(models.Model):
    question = models.CharField(max_length=200)
    history = HistoricalRecords(cascade_delete_history=True)
Другие вопросы по тегам