2015-12-18 3 views
3

Я не в состоянии отобразить QuerySet при использовании AjaxНевозможно отобразить QuerySet с помощью 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

Какой результат вы получаете? Попробуйте распечатать только «данные». –

+0

Где именно это происходит? Правильно ли ответ возвращается с сервера? Вы прыгаете в успех-обратный вызов? –

+0

возвращает 500 error –

ответ

6

Если вы посмотрите на сообщение об ошибке из Django, вы увидите, что он жалуется, что запрос не является сериализуемым JSON. Для запросов ajax вы можете увидеть ответ, используя инструменты разработки веб-браузера, когда DEBUG=True.

Первое, что нужно сделать, это использовать values(), который возвращает набор запросов, содержащий словари для каждого экземпляра в наборе запросов. Во-вторых, вам нужно принудить запрос в список.

queryset = StoreProduct.objects.get_size(productid) 
values_list = list(queryset.values()) 
+0

У меня нет 15 репутации, чтобы повысить ваше решение –

+0

Не беспокойтесь об этом, спасибо, что приняли ответ. – Alasdair

2

Вы не можете отправить каталог запроса как json, потому что json - это просто строка. Вы можете использовать Джанго сериалайзер применить к QuerySet:

from django.core import serializers 

serialized_qs = serializers.serialize('json', queryset) 
data = {"queryset" : serialized_qs} 
return JsonResponse(data) 

Также в вашем JavaScript вы должны сделать data['queryset'], чтобы получить доступ к QuerySet в формате JSON.

+1

Обратите внимание, что это вернет '{" queryset ": ''}'. Я думаю, что OP, вероятно, хочет '{" queryset ": [, ...]}'. – Alasdair

+0

Да, мне нужно {"queryset": [, ...]} –

Смежные вопросы