2012-05-03 4 views
0

2日間私はDjangoプロジェクトのトランザクションの問題に固執しました。私はメッセンジャーシステムを開発しています。ユーザーにメッセージを送信すると、送信されたメッセージがoutbox div(jQuery/Ajaxで、更新ページではない)に正しく表示されます。さて、別のメッセージを送信すると、送信トレイに表示される新しいメッセージは以前送信されたものと同じになります。Djangoのクエリでデータベースから更新された情報を取得する方法は?

私が送るすべてのメッセージは、最初のものと同じです。データベーステーブルでは、メッセージはうまく保存されているので、問題はクエリから来ていると思います。

クエリは次です:

@login_required(login_url='/') 
def getmessage(request, mode=None): 
if request.is_ajax(): 
    if request.method == "GET": 
     # Retrieve last message sent by user 
     Message.objects.update() 
     q = Message.objects.filter(sender=request.user).order_by('send_at')[:1] 

     response = {} 
     for sent in q: 
      sent_message = {} 
      sent_message['recipient'] = sent.recipient.username 
      print sent.recipient.username 
      sent_message['body'] = sent.body 
      response.update({'sent': sent_message}) 

     # Make json object 
     json = simplejson.dumps(response) 

     # Send answer to client side 
     return HttpResponse(json, mimetype='application/json') 
    else: 
     # No POST request, redirecting 
     return HttpResponseRedirect('/messenger/') 
else: 
    # No AJAX request, redirecting 
    return HttpResponseRedirect('/messenger/') 

のはライン "印刷sent.recipient.username" に注意を払ってみましょう。この行は常に最初のメッセージ受信者名を表示します。

私はこの問題について話しているstackoverflowの周りのいくつかのスレッドを読んでいますが、トランザクションを手作業で処理すると何の成功もありません。クエリの前に "Message.objects.update()"を作成しても動作しません。

提案がありますか?どのように起こっているのか分からないのは非常に面倒です。

モデルコードなどの情報が必要な場合は、教えてください。

ありがとうございます!

答えて

2

あなたは「send_at」によって結果を注文しています。これはおそらく、最初に送信されたメッセージを示します。あなたが最後を望むなら、あなたは "-send_at"で注文する必要があります。

q = Message.objects.filter(sender=request.user).order_by('-send_at')[:1] 
+0

ああ私の神...今、それは... 2日間この愚かなことを解決しようと過ごした。 このためのスレッドを作成して申し訳ありません。非常に仲間ありがとう。 –

+1

Yikes。あまりにも悪い気がしないでください...この種のことは、誰かが何らかのポイントでストライクしています! – Greg

関連する問題