原理:
1,queryset類型的讀取方式與字典類似,但並非字典,它內部的值都是OBJECT對象。那么JSON是無法序列化對象的。
2,利用values()和values_list()方法,將queryset轉換成字典和列表形式的存儲方式。PS:這樣還不行,還有一步要做。
3,再將轉換完的queryset轉換成list列表。 注意:上面的轉換不是轉換成字典或列表,而是字典和列表的數據存儲形式。
4,這樣,通過JsonResponse就可以序列化了,重要一點:必須加入safe=False 參數。(因為咱們序列化的是一個列表)
(解釋 safe :這個參數被設置為:False ,那data可以填入任何能被轉換為JSON格式的對象,比如list, tuple, set。 默認的safe 參數是 True. 如果你傳入的data數據類型不是字典類型,那么它就會拋出 TypeError的異常。)
視圖函數中部分代碼:
1 if request.is_ajax(): 2 id = request.GET.get('id') 3 article_list = Article.objects.values().filter(user__department__pk=id)#queryset不能json序列化,是因為queryset中是對象obj.需要轉換成字典 4 ret_list = list(article_list) 5 return JsonResponse(ret_list, safe=False)
前端AJAX中的代碼:
<script> $('.showlist').click(function () { $.ajax({ url:"", type:'get', data:{ id:$(this).val(), }, success:function (data) { console.log(data[0]['nid']) } }) }) </script>