2012-05-03 46 views
0

2天后,我在我的Django项目中遇到了交易问题。我正在开发一个messenger系统,当我向某个用户发送消息时,发送的消息在发件箱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

哎呀。不要太难过......这种事情在某些时候会引起所有人的注意! – Greg

相关问题