2014-11-17 35 views
1

我寫了一個Ajax調用來返回actor名稱。除了序列化以外,一切正常。將Queryset轉換爲包含JSON值的字典

模型

class ActorManager (models.Manager): 
    def actor_like(self, query): 
     actor_list = self.values('name', 'id').filter(name__icontains=query) 
     # actor_list = self.filter(name__icontains=query) <-- this works. but I need 'values' 
     return actor_list 

view.py

def search(request, types, query): 
    lists = Actor.objects.actor_like(query) 
    data = serializers.serialize('json', lists) 
    return HttpResponse(data, content_type='application/json') 

上述拋出錯誤,在/搜索/演員/ BAL

AttributeError的/

'字典'對象沒有屬性'_meta'

而模型查詢「值」工作正常。下面的工作正常,

actor_list = self.filter(name__icontains=query) 

我需要「值」,以減少數據傳輸。我怎樣才能做到這一點?

請幫助,在此先感謝。

+1

您不需要序列化查詢集對象只需添加字典作爲數據['列表'] =列表,您可以使用列表作爲模板中的對象。 –

+1

如果您正在使用json進行ajax調用,則Tanveer是正確的,序列化應該從作爲列表返回的查詢集自動完成。 Serializer.serialize用於將整個查詢集返回給json,您可以將其返回到視圖模板。 –

+0

你們是對的。如果您已添加「答案」而不是評論,我會將您的標記標記爲正確答案! –

回答

3

serializers.serialize僅適用於完整查詢集。但values返回一個容器的字典,所以你可以或多或少地將它直接傳遞給json.dumps - 你需要做的就是將容器本身轉換爲列表。

lists = Actor.objects.actor_like(query) 
data = json.dumps(list(lists)) 
+0

如果字典包含小數,該怎麼辦? –