2011-05-04 77 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