장고에서 여러 개체 삭제


107

웹 페이지를 사용하여 django의 데이터베이스에서 삭제할 여러 개체를 선택해야합니다. 선택할 카테고리가 없어서 모두 삭제할 수 없습니다. 내 자신의 삭제 양식을 구현하고 django에서 처리해야합니까? 아니면 django에 이미이 작업을 수행 할 수있는 방법이 있습니까? 관리 인터페이스에서 구현됩니다.

답변:


202

원하는 QuerySet을 삭제할 수 있습니다. 예를 들어, 일부 Post 모델이있는 모든 블로그 게시물을 삭제하려면

Post.objects.all().delete()

게시 날짜가 미래인 게시물을 삭제하려면

Post.objects.filter(pub_date__gt=datetime.now()).delete()

그러나 QuerySet의 범위를 좁힐 수있는 방법을 찾아야합니다. 보기에서 특정 개체 만 삭제하려면 일반보기 삭제를 살펴보십시오 .

편집하다:

오해해서 죄송합니다. 대답은 그 사이 어딘가에 있다고 생각합니다. 직접 구현하려면 ModelForms 및 일반 뷰를 결합하십시오 . 그렇지 않으면 유사한 기능을 제공하는 타사 앱을 살펴보십시오. A의 관련 질문 , 추천했다 장고 - 필터 .


1
아니 당신은 질문을 오해했습니다. 모든 것을 삭제할 수 있음을 이해합니다. 하지만 웹 페이지의 양식에서 삭제할 개체를 선택해야합니다. 그런 다음 내 views.py의 양식에서 반환 된 데이터를 처리합니다. 그런 다음 데이터를 루핑하면서 삭제 양식에서 반환 된 내용을 반복합니다. 그러나 나는 이것을 장고에서 구현하는 가장 좋은 방법이 무엇인지 알고 싶었습니다.
Dean

아, 내 실수! 타사 앱을 사용하거나 ModelForms.
Matt Luongo

7
@Dean, 그 삭제보기를 살펴보십시오. 또는 자신 만의 뷰를 작성할 수 있습니다. 궁극적으로 PK 목록을 받고 모델에서 delete를 호출 할 수 있습니다. MyModel.objects.filter(id__in=request.POST.getlist('delete_list')).delete()그리고 임의의 사람이 모든 것을 삭제할 수 없도록 무언가를 원할 것입니다. PK를 추측하여 DB의 개체.
유지 'Tomita'Tomita

1
@Dean, 질문에 대해 더 많이 이해하지 않고 대답하기가 어렵습니다. 사용자가 올바른 삭제 기준 (아마도 ID 번호를 입력하는 입력 상자 일 수도 있지만 더 복잡 할 수도 있음)을 선택할 수있는 양식을 작성하고 이에 응답하는보기를 작성하기 만하면됩니다. 양식은 유효성 검사 (권한)를 수행 한 다음 마지막으로 해당 filter(foo).delete()메서드를 실행합니다 .
유지 'Tomita'Tomita

1
이것이 프레임 워크와 함께 제공되지 않는 이유 중 하나는 @YujiTomita가 언급 한 편집 / 삭제 및 기타 복잡성에 대한 인증 문제입니다. 복잡한 필터링이 정말로 필요한 경우 django-filtering을 확인하고 사용자가 인증 된 경우 QuerySet.delete ()를 호출하는 삭제 버튼을 추가합니다.
Matt Luongo 2012
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.