2014-01-27 3 views
3

특정 상태의 개체를 편집해야하는 모델이 있습니다.개체를 다시 저장하는 올바른 방법은 무엇입니까?

post_save 신호를 사용하여 주어진 상태를 식별 할 수 있으며 거기에서 지정된 방법을 실행할 수 있습니다.

내 문제는 이제 이러한 메서드에서 끝난 끝없는 save-loop가 발생하여 개체를 저장해야한다는 것입니다. 이런 종류의 상황을 처리하는 데 '올바른 방법'이 있습니까? 아니면 악조건 또는 악화일까요?

을 신호에 연결된 방법 내부 :

signals.post_save.disconnect(YourModel.your_custom_method, sender=YourModel) 

# Do your stuff 

instance.save() 

signals.post_save.connect(YourModel.your_custom_method, sender=YourModel) 

루프의이 종류를 방지하기 위해

답변

2

, 당신은 나중에 신호를 다시 연결 한 후 사용자 정의 메소드의 시작 부분에서 분리하고 필요 참고 : 나는 "YourModel.your_custom_method을 사용하고 내가 모델 내부에 배치하는 경향이 있기 때문에,이 분명히 필수 아닌

편집 :.

그래서이 질문은 save() 대신 clean()을 사용하여 update()를 사용하면 원하는 것일 수 있습니다.

Django post_save preventing recursion without overriding model save()

제대로 캐싱을 관리하지 않는 한 당신은 이미이 동안의 검색어를 검색하기 위해 데이터베이스에 접속하도록 강요 할 것이기 때문에 나는 완벽한 솔루션으로 생각하지 않을 청소기 수도 있지만 신호의 인자로 당신의 손에 인스턴스 ...

save_without_signal의 아이디어는 흥미로운 것 같지만 위의주의 사항없이 어떻게 할 수 있을지 궁금합니다. 이 도움이

희망,

감사합니다,

+0

감사하지만, 죄송합니다, 아마도 내가 나쁜 해결의 나의 전망을 언급해야합니다. 이것은 가장 직접적인 접근 방식으로 나를 공격하지 않습니까? – BSG

+0

모델 안에 배치하는 데는 문제가 없습니다. 그것은 정말로 정상을 넘어서는 것처럼 보이는 신호의 단절이지만, 이것을 다루는 '올바른'방법으로 간주됩니다. – BSG

+0

음, 어떤 사람들은 save()를 오버라이드하는 대신 신호를 사용하지 못하는 경향이 있으며, 그렇지 않은 경우 분리/재 연결은 save() 오버라이드를 제외하고는 저장 방법을 제외하고는 내 지식 만이 유일한 방법입니다. 문서에 명시 적으로 설명되어 있지는 않지만이 문제와 관련하여 다른 점은 없습니다. – Ambroise

관련 문제