특정 모델 인스턴스에 대한 삭제를 비활성화하고 싶습니다.

나는 무시했다 delete_modelModelAdmin 다음과 같이 :

def delete_model(self, request, client):
    if client.schema_name == 'public':
        messages.set_level(request, messages.ERROR)
        messages.error(request, 'Suppression interdite pour la racine')
        super().delete_model(request, client)

보기 변경에서 삭제 버튼을 클릭하면 작동합니다.

그러나 대량 삭제는 방지하지 않고 인스턴스가 삭제되므로

이 문제를 어떻게 해결할 수 있습니까? 나는 또한 깨달았다 delete_model 대량 삭제로 호출되지 않아 약간 이상합니다.

  • 답변 # 1

    대량 삭제 관리자 작업 문서가 이미 경고하므로

    The “delete selected objects” action uses QuerySet.delete() for efficiency reasons, which has an important caveat:your model’s delete() method will not be called.

    If you wish to override this behavior, you can override ModelAdmin.delete_queryset() or write a custom action which does deletion in your preferred manner – for example, by calling Model.delete() for each of the selected items.

    For more background on bulk deletion, see the documentation on object deletion.

관련 자료

  • 이전 rust - 범위를 구조체 필드로 사용
  • 다음 python - 다른 열을 기준으로 값 바꾸기