如何通过异步模板中使用的onclick函数更改模型变量(无需显式刷新)

时间:2014-08-05 09:16:23

标签: javascript jquery ajax django

我正在创建一个django应用程序,用户可以在其中发布状态'。他以前的状态列表'也显示在同一页面上,每个帖子都有一个delete post选项。我在该按钮上添加了一个使用ajax calls to change the class variable in models.py的onclick函数。即。 models.py中类status_class中的delete变量在单击delete post按钮后将其值从0更改为1。然后只显示删除= 1的帖子。在脚本中帮助我modify the delete_post function,以便它像我上面提到的那样工作。如果需要进行任何其他更改,请提及。感谢。

Models.py

from django.db import models
from django.contrib.auth.models import User

class status_class(models.Model):
    username=models.ForeignKey(User)
    text=models.CharField(max_length=2000, null=False, blank=False)
    pub_date=models.DateTimeField("Published: ")
    delete=models.IntegerField(default=0)

     def __unicode__(self):
        return self.text

模板中的脚本

<script>
    function deletepost(id)
    {
        $.ajax({
            url: "/delete_post/",
            type: "POST",
            data: {'value':id},
            success: function(response) {
            },

        });
    }
</script>

URL

url(r'^delete_post/$', 'status.views.deletepost_view', name='deletepost_view'),

视图

@csrf_exempt
def deletepost_view(request):
    value=request.POST.get("value")
    b=User.objects.filter(id=str(value))
    #delete change statement
    resp=json.dumps(b)
    return HttpResponse(resp, content_type="application/json")

模板

{% for i in d %}
<p>{{ i.text }} &nbsp&nbsp&nbsp&nbsp {{ i.pub_date }}
<button type="button" class="btn btn-danger" onclick="deletepost(i.id);"> Delete Post </button></p>
<hr>

{% endfor %}



NOTE:也帮助我。我想过滤帖子,只显示删除变量等于0的帖子。尚未删除的。我应该在哪里写过滤语句?

1 个答案:

答案 0 :(得分:3)

以下更改将有效。

视图

def deletepost_view(request):

    value=request.POST.get("value")
    b=status_class.objects.get(id=str(value))
    b.delete = 1
    b.save()

    resp=json.dumps(b)

    return HttpResponse(resp, content_type="application/json")

模板

{% for i in d %}
<p>{% if i.delete == 0  %}
      {{ i.text }}&nbsp&nbsp&nbsp&nbsp {{ i.pub_date }}
      <button type="button" class="btn btn-danger" onclick="deletepost({{ i.id }});"> Delete Post </button>
      <hr></p>
   {% endif %}

{% endfor %}