【问题标题】:Ajax returning only new messageAjax 只返回新消息
【发布时间】:2011-08-18 23:05:37
【问题描述】:

我有这个 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>

每条消息都有一个文本和一个时间戳字段(自动添加)。 实际上,当您插入一条新消息时,process-page 会返回首页所有消息列表:

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 %}

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

我该怎么做?想法?

【问题讨论】:

    标签: python ajax django


    【解决方案1】:

    如果我对您的理解正确,您希望返回比您的表单保存的消息更新的消息列表。您可以从表单中获取时间戳,然后过滤消息以仅获取时间戳大于刚刚保存的消息的消息。我将假设您表单的时间戳字段属于 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)
    

    【讨论】:

    • 不,我想返回一个比我在页面消息列表中看到的最后一个更新的消息列表。
    • 然后传入页面上的最后一条消息,并过滤它的时间戳。
    • 表单有两个字段?短信和?最后一条消息的 ID?
    • 您可以在表单中添加任何您想要的字段。我建议将最后一条消息的 id 添加到您的表单中,这样您就可以根据它的时间戳过滤您的消息
    猜你喜欢
    • 2014-08-17
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 2020-11-17
    • 1970-01-01
    • 2015-07-17
    • 2021-05-02
    • 1970-01-01
    相关资源
    最近更新 更多