我在使用ajax
时无法显示查询集这是我的views.py
:
if request.user.is_authenticated():
productid = request.GET.get('productId')
print productid
if request.is_ajax():
try:
queryset= StoreProduct.objects.get_size(productid)
except:
queryset= None
data = {
"queryset" : queryset
}
return JsonResponse(data)
这是我的ajax脚本:
<script type="text/javascript">
function getStoreView(event, productId) {
event.preventDefault();
var data = {
productId : productId
}
$.ajax({
type: "GET",
url: "{% url 'storeView' user=store.user %}",
data: data,
success: function(data) {
console.log(data.queryset)
},
error: function(response, error) {
alert(error);
}
});
};
</script>
我该怎样做才能解决上述问题?
提前致谢
答案 0 :(得分:14)
如果您查看来自Django的错误消息,您会看到它抱怨查询集不是JSON可序列化的。对于ajax请求,您可以在DEBUG=True
时使用网络浏览器的开发工具查看响应。
要做的第一件事是使用values()
,它返回一个查询集,其中包含查询集中每个实例的字典。其次,您需要将查询集强制转换为列表。
queryset = StoreProduct.objects.get_size(productid)
values_list = list(queryset.values())
答案 1 :(得分:2)
您不能将queryset目录作为json发送,因为json只是一个字符串。您可以使用django序列化程序应用于您的查询集:
from django.core import serializers
serialized_qs = serializers.serialize('json', queryset)
data = {"queryset" : serialized_qs}
return JsonResponse(data)
同样在您的javascript中,您必须{j}来{j}访问您的查询集。