2014-10-22 2 views
1

모델의 post_save 신호에 핸들러를 연결하려고하면 해당 모델의 ManyToMany 필드가 비어있는 것을 발견했습니다. 내가 봤는데 여기에 해결책을 찾았 : ManyToManyField is empty in post_save() function 솔루션은 m2m_changed signal 모델에 연결하는 것이었다. 그러나 아직 몇 가지 질문이 있습니다.Django post_save signal + ManyToManyField : more questions

모델 인스턴스를 생성 조건이 있었다이 질문에

를 업데이트하지 않은 경우 정확하게 감지하는 방법 :

if action == 'post_add' and not reverse: 

는하지만 내가 인스턴스를 편집하고 때 작동하지 않는 것 같다 관리자 인터페이스에서 (관리자의 "저장"버튼을 클릭 할 때 m2m 필드가 눌러 진 것처럼 보입니다).

post_save 처리기 에 인스턴스 속성을 할당하고 m2m_changed 처리기에서 확인하여이를 수행하는 한 가지 방법을 발견했습니다.

def on_m2m_changed(sender, instance, action, reverse, *args, **kwargs): 
    if action == "post_add" and not reverse and instance.just_created: 
     # do stuff 

def on_save(sender, instance, created, *args, **kwargs): 
    instance.just_created = created 

하지만 나에게는보기가 좋지 않으며 올바른 방법이라고 확신하지 못합니다. 그것을 할 다른 방법이 있습니까?

모델에 여러 m2m 필드가 있다면 어떻게해야합니까?

모델의 m2m 필드 업데이트 순서가 잘 정의되어 있으며이를 신뢰할 수 있습니까? 또는 각 m2m_changed 핸들러에 연결하고 인스턴스에서 플래그/카운터를 조작해야합니까? BTW, 우리는 m2m_changed는 모든 M2M 필드와 인스턴스의 저장을 완료 처리 할 수있는 또 다른 방법이 될 수 있습니다 post_save

후에 실행된다는 사실에 의존 할 수 있습니까?

답변