0

2日間、Djangoプロジェクトのトランザクションの問題で立ち往生しています。メッセンジャーシステムを開発していますが、一部のユーザーにメッセージを送信すると、送信されたメッセージが送信トレイdivに正しく表示されます(ページの更新ではなく、jQuery / Ajaxを使用)。別のメッセージを送信すると、送信トレイに表示される新しいメッセージは以前に送信されたものと同じになります。

私が送信するすべてのメッセージは最初のようなものです。データベーステーブルではメッセージがうまく保存されているので、問題はクエリに起因すると思います。

次のクエリは次のとおりです。

@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/')

「printsent.recipient.username」の行に注目しましょう。この行は常に最初のメッセージ受信者名を出力します。

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

なにか提案を?それがどのように起こっているのか理解できないのは非常に迷惑です。

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

ありがとう!

4

1 に答える 1

2

クエリは「send_at」で結果を並べ替えています。これにより、おそらく最初に送信されたメッセージが表示されます。最後のものが必要な場合は、「-send_at」で注文する必要があります。

q = Message.objects.filter(sender=request.user).order_by('-send_at')[:1]
于 2012-05-04T00:05:49.877 に答える