我想更新页面中的元素,以实时告诉用户有多少对象受表单中标准的选择影响。
作为示例,表单要求输入一个数字,并且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()
-因此最终有一种方法可以将我的其他信息添加到其中,否则我将完全出错。
答案 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"]