У меня есть модель Django, которая содержит ядро настроек для функции приложения.Вы никогда не должны удалять эту модель.Я пытаюсь обеспечить соблюдение этого приложения.Я отключил функцию удаления в админке, а также отключил метод удаления в модели, но QuerySet имеет свой собственный метод удаления.Пример:
MyModel.objects.all()[0].delete() # Overridden, does nothing
MyModel.objects.all().delete() # POOF!
По иронии судьбы, в документации Django говорится о том, почему delete () является методом в QuerySet, а не Manager:
Это механизм безопасности дляпредотвратить случайный запрос Entry.objects.delete () и удаление всех записей.
То, что включение .all()
является «механизмом безопасности», по меньшей мере сомнительно.Вместо этого это эффективно создает бэкдор, который нельзя закрыть обычными средствами (переопределяя менеджер).
У кого-нибудь есть подсказка, как переопределить этот метод на таком ядре, как QuerySet, без необходимости чинить патчи исходному тексту?