在GET请求中使用django和AJAX在输入更改后立即更新页面元素

时间:2019-06-19 17:32:15

标签: javascript python jquery django ajax

我想更新页面中的元素,以实时告诉用户有多少对象受表单中标准的选择影响。

作为示例,表单要求输入一个数字,并且django逻辑将删除任何一个pk小于该值的模型实例,一旦单击“提交”按钮-但在单击用户之前,知道他们将要删除多少个

<span id="number-changed">NULL</span> objects will be deleted

所以我想要的最终结果是#number-changed将被填充MyModel.objects.filter(pk__lt=input_number).count()之类的值。

我已经通过以下方式对input进行了更改以建立AJAX调用:

 $("input").change( function() {
    $.ajax({
        type: "GET",
        url: "{% url 'myapp:bulkdelete' %}",
        data: {
            csrfmiddlewaretoken: $("input[name='csrfmiddlewaretoken']").val(),
        },
        success: function (data) {
        // code to update #number-changed
        }

我想知道如何在视图中实现,以便成功完成GET的{​​{1}}函数可以使用我检索的值。一些伪代码:

success

问题:

我可以通过# views.py class MyView(FormView): # ... def get(self, request, *args, **kwargs): input_number = ??? number_changed = MyModel.objects.filter(pk__lt=input_number).count() # presumably some super().get() call here return ??? 检索当前的input_number还是在发出AJAX请求时将其作为request参数传递?

如何将我需要的信息url添加到number_changed方法的返回值中,以及如何在get()内部访问此信息?

在使用success请求之前,我已经使用django实现了AJAX的方式,而我只返回了一个POST及其所需的数据。但是,在加载页面时会调用一个初始JsonResponse,并且需要返回完整的get()-因此最终有一种方法可以将我的其他信息添加到其中,否则我将完全出错。

1 个答案:

答案 0 :(得分:1)

从服务器的角度来看,Ajax请求与任何其他请求完全相同。您可以只将数据包括在查询字符串中,然后通过request.GET字典在视图中访问。

jQuery将通过data参数为您生成该查询字符串;注意,GET请求不需要csrf令牌。所以:

    type: "GET",
    url: "{% url 'myapp:bulkdelete' %}",
    data: {
        input_number: $(this).val(),
    },
    ...

在视图中:

def get(self, request, *args, **kwargs):
    input_number = request.GET["input_number"]