2011-05-04 133 views
0

我有这个Django应用程序:阿贾克斯只返回新信息

与一个领域的顶尖发送消息到数据库的表单的页面时,它下面的全局消息列表。

<body> 

<form id="messageForm" action="" method="post"> 
    {{ form.as_p }} 
    <input type="submit" id="go" name="go" value="Go!"> 
</form> 

<div id="msg_list"> 
    <ul id="update"> 
     {% for message in messages %} 
     <li>{{ message }}</li> 
     {% endfor %} 
    </ul> 
</div> 

</body> 

当你点击提交:

<script> 
$(document).ready(function() { 
    $("#messageForm").submit(function(event) { 
     event.preventDefault(); 
     data = $("#id_text").val() 
     dataString = "text=" + data 
     $.ajax({ 
      type: "POST", 
      url: "/sendmsg/", 
      data: dataString, 
      success: function(html) { 
       $("#update").html(html); 
       $("ul#update li:first").hide() 
       $("ul#update li:first").slideToggle("slow"); 
      } 
     }); 
     return false; 
    }); 
}); 
</script> 

每个消息具有文本和时间戳字段(自动添加)。 其实,当你插入一个新的消息,该过程页面返回到主页消息的所有名单:

if form.is_valid(): 
    form.save() 
    messages = Message.objects.all() 
    render(request, 'message_list.html', {'messages': messages}) 

message_list.html

{% for message in messages reversed %} 
<li>{{ message }}</li> 
{% endfor %} 

但是,当你点击“提交”,其他用户可能已经发送了其他消息。我只会返回新消息。我的意思是消息的时间戳比我能在列表中看到的最后一条消息的时间戳更新。我希望你能得到我。

我该怎么做?想法?

回答

0

如果我正确理解你,你想返回一个比你的表格保存的消息更新的消息列表。您可以从表单中获取时间戳,然后过滤消息以仅获取时间戳大于刚刚保存的消息的消息。我将假设表单的时间戳字段是forms.DateTimeField类型。

timestamp = form.cleaned_data['timestamp'] # get timestamp from form, 
messages = Message.objects.filter(timestamp__gt=timestamp) # return only messages newer than timestamp 

编辑: 如果你想比页面上的最后一篇更新的唯一邮件,发送ID中的最后消息,然后筛选它的时间戳,以同样的方式,比如你可以这样做如:

last_msg = get_object_or_404(Messages, pk=form.cleaned_data['last_msg']) 
messages = Message.objects.filter(timestamp__gt=last_msg.timestamp) 
+0

不,我想返回一个消息列表比我可以在页面中的消息列表中看到的最后一个更新。 – 2011-05-05 12:27:48

+0

然后传入页面上的最后一条消息,并过滤它的时间戳。 – zeekay 2011-05-05 16:32:10

+0

窗体有两个字段?短信和?最后一条消息的ID? – 2011-05-05 18:40:06