2012-02-06 1 views
0

며칠 동안이 문제에 봉착했습니다. 개체의 상태가 업데이트되면 특정 작업을 수행하려면 어떻게해야합니까?장고 모델 상태 수정시 조치 수행

Order django 모델의 전화 번호는 status입니다. 주문 상태가 new에서 processed으로 바뀌면 몇 가지 구체적인 조치를 취해야합니다.

것은이 상태가 어느 곳에서 업데이트 할 수 있습니다 : 프론트 엔드보기, 관리자 모듈, 벌크 액션, 관리 명령 등 또한

를, 나는 단지 조치가 후에 수행 할 주문이 저장됩니다.

신호가 작동하는 것 같지만 상태가 변경되었는지, 이전 값이 무엇인지 감지 할 수있는 방법을 찾을 수 없습니다.

나는 django fsm, but it's clearly not the way to go을 확인했습니다.

아이디어가 있으십니까?

+0

https://github.com/Atomidata/django-audit-log에서 살펴 보았습니까? – arie

+0

조금 과장된 것 같습니다. Plus«... 응용 프로그램의 웹 인터페이스를 통해 모델 인스턴스를 만들 때 모델 인스턴스의 변경 사항 만 추적 할 수 있습니다. » –

답변

1

post_save 신호에서 어떤 필드가 변경되었는지 감지하려면 모델 인스턴스의 원래 상태를 기억해야합니다. Actions triggered by field change in Django에 대한 한 가지 대답은 이것을 고려하고 Dirty fields in django을 가리키며 저장시 모델에서 "더티"필드를 찾을 수있는 다양한 믹스 인을 찾을 수 있습니다.

+0

그래,하지만 내가 이해하는 한 벌크 업데이트의 경우에는 인스턴스가 생성되지 않으므로 더티 필드 전략이 제대로 작동하지 않을 것입니다. –

+0

사실,'update'는'save'도 신호도 트리거하지 않습니다 (https://docs.djangoproject.com/en/dev/topics/db/queries/#updating-multiple-objects-at-once). 사용자 정의 관리자에서'update'를 덮어 쓸 수도 있고, SQL을 사용하여 직접 업데이트를 처리 할 수도 있습니다. 트리거 : http://dev.mysql.com/doc/refman/5.0/en/triggers.html (Django/Python은 전혀 사용하지 않음). –