Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用Javascript更改Django模型_Python_Html_Ajax_Django - Fatal编程技术网

Python 使用Javascript更改Django模型

Python 使用Javascript更改Django模型,python,html,ajax,django,Python,Html,Ajax,Django,因此,每当有人按下按钮时,我想将Django模块“Post.upvots”更改为+1 无需重新加载页面 我认为它叫做Ajax JS: html: url.py 那么我该怎么做呢?您需要使用ajax来解决这个问题 为此URL创建单独的路由。(最好使用post方法) my_views.py 你的js 您是否尝试过在javascript中查找如何发出ajax请求?基本上,您需要一个POST(而不是GET,因为您正在更改数据库),因此您的视图应该响应POST请求。您的ajax调用应该是您为视图定义的UR

因此,每当有人按下按钮时,我想将Django模块“Post.upvots”更改为+1 无需重新加载页面

我认为它叫做Ajax

JS:

html:

url.py


那么我该怎么做呢?

您需要使用ajax来解决这个问题

为此URL创建单独的路由。(最好使用post方法)

my_views.py 你的js
您是否尝试过在javascript中查找如何发出ajax请求?基本上,您需要一个POST(而不是GET,因为您正在更改数据库),因此您的视图应该响应POST请求。您的ajax调用应该是您为视图定义的URL,将
pk
作为数据发送,您的视图应该使用JSON响应进行响应,以便脚本知道它是否成功。return HttpResponse(JSON.dumps(…)json从何而来?HttpResponse只返回我们刚刚以json格式创建的dict。理想情况下,此响应具有post投票计数。对于thr错误,请检查url,您必须在末尾有尾随斜杠。
$('.buttonclass').click(function(){
    var pk;
    pk = $(this).attr("data-pk");
});
<span data-pk="{{post.pk}}" class="buttonclass"></span>
def upvote(request):
    pk = None
    if request.method == 'GET':
        pk = request.GET['pk']     
    obj = models.Post.objects.get(pk=pk)
    obj.upvotes = obj.upvotes +1
    obj.save()
    return redirect("index") #without this
 url(r"upvote/(?P<pk>\d+)/$", views.upvote, name="upvote"),
class Post(models.Model):
    upvotes = models.IntegerField(default = 0)
from django.http import HttpResponse
def upvote(request):
    pk = request.GET['pk']     
    obj = models.Post.objects.get(pk=pk)
    obj.upvotes = obj.upvotes +1
    obj.save()
    response_data = {'success':1}
    return HttpResponse(json.dumps(response_data), content_type="application/json")
$('.buttonclass').click(function(){
    var pk = $(this).attr("data-pk");
    $.get('[YOUR_URL_HERE]'+/pk,function (r){console.log(r);})
});