2011-12-09 21 views
0

に私は私のDjangoのデータベースに行を挿入し、私はその後、ジャンゴを経由して試してみて、クエリに使用するIDを返す外部のWebサービスをcalles Djangoのビューを持っているとジャンゴに表示されない挿入します。しかし、djangoはレコードを表示しません(django 1.2.5、dev runserverと実際の環境で動作します)。外部SQLの行は、同じ関数呼び出し

それは非常に単純なビューです:

  1. コールurllib2の要求、外部Webサービスへ
  2. のget戻りIDから、サービス
  3. item = Comp.objects.get(id = return_id_new_row)
    ERROR cant find objects.
    私はDBが直接チェックし、オブジェクトがあると述べましたそこで。
  4. 私はFILTERを取得し、私は、プリントアイテムを行うとき、私はオブジェクトとクエリセットを見ることができます置き換えるしかし、すぐに私はそれに触れることを試みるように私はエラーを取得します!
  5. 私はDjangoの世界にそれを得る微行を照会することはできませんが、(ジャンゴに触れていない)のDjangoで生のSQLを使用!

は、いくつかの方法がキャッシュをジャンゴいますか?同じ通話で外付けインサートが表示されないのはなぜですか?私は何かをリフレッシュする必要がありますか?

何か助けてください!

答えて

1

これは、トランザクションの問題のように聞こえます。あなたの視点の中であなたがやることは、同じトランザクション内にあるので、変更が表示されます。しかし、外部サービスは別のトランザクションを使用するため、現在のサービスをコミットするまで変更内容は表示されません。

Django documentation on transactionsを見てください。おそらく、手動トランザクション管理を使用して、新しい項目を取得する前にコミットする必要があります。

+0

はい!大変ありがとうございました。その取引がこの奇妙な行動を引き起こすとは思わなかった。ステップ3を実行する前に、マニュアルコミットデコレータを追加し、コミットを呼び出してください。このビューでは、手動でコールする必要があります。 – oliver

関連する問題