나는 신호를 미리 저장하고 post_save하여 분석을 Mixpanel에 보낸다. 나는 이것을 내 모델의 save 메소드와 분리하는 것을 선호한다.장고 : pre_save 신호에서 변수를 전달하기
pre_save 신호가 발생할 때 인스턴스의 이전 값을 저장 한 다음 post_save에서 새 값을 확인하는 방법이 있습니까? 나를 위해
@receiver(pre_save, sender=Activity)
def send_user_profile_analytics(sender, **kwargs):
activity_completed_old_value = kwargs['instance'].is_completed
# store this value somewhere?
@receiver(post_save, sender=Activity)
def send_user_profile_analytics(sender, **kwargs):
if kwargs['instance'].is_completed != activity_completed_old_value:
# send analytics
pre_save보다 분석을 보낼 post_save를 사용하여보다 강력한 보이지만, 그 시점에서 나는 모델 인스턴스에서 변경된 내용을 볼 수 없습니다 :
내 코드는 다음과 같습니다. 내 모델의 저장 기능에서 전역을 사용하거나 무언가를 구현하는 것을 막고 싶습니다.
나는 이미 그것을 생각하고 있었지만 Django에 대한 좋은 연습은 무엇입니까? 왜 내가 그것을 보호 속성으로 만들겠습니까? post_init 힌트를 보내 주셔서 감사합니다. – jvannistelrooy
@jvannistelrooy : 보호 된 속성은 필요 없지만 이러한 기능 외에는 이러한 추가 속성을 사용하지 않는 것이 좋습니다. 서비스 필드 일 뿐이 기 때문입니다. 나는이 솔루션을 어딘가에서 발견했다 ... 내가 찾은 링크를 게시하자마자 – Don
'post_init'이'pre_save'보다 나은 이유를 설명해 주시겠습니까? 값이 실제로 필요하지 않은 경우에도 추가 db 쿼리를 추가하지 않을까요? –