2011-12-09 4 views
0

django 데이터베이스에 행을 삽입하는 외부 웹 서비스를 호출하는 django 뷰가 있습니다. 그런 다음 django를 통해 쿼리하고 쿼리하는 데 사용하는 ID를 반환합니다. 하지만 django는 레코드 (django 1.2.5, dev runserver 및 실제 환경에서 실행 중임)를 보지 못합니다.동일한 함수 호출로 장고에 외부 SQL 행 삽입이 표시되지 않습니다.

매우 간단 볼 수 있습니다 : 외부 웹 서비스에

  1. 통화 urllib2를 요청 서비스
  2. item = Comp.objects.get(id = return_id_new_row)
    ERROR cant find objects.
    내가 DB 직접 확인했다
  3. GET 반환 ID에서와 객체가 거기에.
  4. get을 FILTER로 바꾸고 인쇄 항목을 수행 할 때 객체가있는 쿼리 세트를 볼 수 있지만 터치하려고하면 오류가 발생합니다!
  5. 나는 장고 (장고를 만지지)에서 원시 SQL을 사용하여 행을 잘 질의 할 수 있지만 내 장고 세계로 그것을 얻지 못하겠습니까?!

장고는 어떻게 캐시합니까? 왜 같은 전화에서 외부 삽입물을 볼 수 없습니까? 어떤 것을 새로 고침해야합니까?

도움을 환영합니다!

답변

1

이것은 거래 문제처럼 들립니다. 내부에서 수행하는 작업은 모두 동일한 트랜잭션에 있으므로 변경 사항이 표시됩니다. 그러나 외부 서비스는 다른 트랜잭션을 사용하게되므로 현재 서비스를 커밋 할 때까지 변경 사항을 볼 수 없습니다.

Django documentation on transactions을 살펴보십시오. 새 항목을 가져 오기 전에 수동 트랜잭션 관리를 사용하고 커밋해야합니다.

+0

예! 대단히 감사합니다. 거래가이 이상한 행동을 일으킬 것이라고 생각하지 않았습니다. 3 단계를 수행하기 전에 수동 커밋 데코레이터를 추가하고 커밋을 호출합니다. 이제이 뷰에서 내가 손을 떼거나 데이터를 터치 할 때마다 수동 커밋을 호출해야한다고 생각합니다. – oliver

관련 문제