2009-11-07 4 views

답변

6

아마도 그렇지만 그렇지 않습니다. .update()는 QuerySet의 개별 객체에 대해 .save() 메서드를 호출하지 않고 단일 SQL 호출 (UPDATE)에서 모두를 업데이트합니다. .save()를 사용하지 않으므로 저장 전 및 저장 후 신호를 호출하는 데 일관성이 없습니다. 나는 그것을 원할 수도있는 유스 케이스를 확실히 상상할 수 있지만, 그렇지 않은 경우도 상상할 수있다. 사전 및 사후 저장 신호를 호출하지 않는 것이 프로그래머에게 더 많은 융통성을 제공하기 때문에 올바른 동작입니다. 이러한 신호를 수동으로 트리거하는 것은 어렵지 않습니다. 프로그래머가 원치 않는 동작을 피하기 위해 신호를 끊는 것을 기억하도록 요구하는 것보다 원하는 동작을 얻기 위해 신호를 트리거하도록하는 것이 더 나은 설계 결정이라고 생각합니다.

+1

그럼에도 불구하고 나는 queryset.delete() 메소드가 단일 인스턴스에서 delete()를 호출하지 않기 때문에 어떻게 든 일관성없는 동작이라고 생각하지만, model.delete()와 같은 시그널을 보낸다. –

+1

또한 queryset에 저장 관련 신호를 보내려면 업데이트 외에도 요소에 대해 select를 수행해야하므로 대량 업데이트 방법의 이점이 없어집니다. –