无法使用ajax

时间:2015-12-18 15:26:26

标签: ajax django django-templates

我在使用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>

我该怎样做才能解决上述问题?
提前致谢

2 个答案:

答案 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}访问您的查询集。