2011-03-01 75 views
2

我試圖在序列化之前將屬性或兩個屬性添加到Django結果對象。我的Python技能相當薄弱,所以我們走了。將屬性添加到Django結果對象

我想做的事:

products = Product.objects.all() 
products.totalPages = 10 
products.currentPage = 1 
data = serializers.serialize('json', products) 

沒有嘗試添加的總頁數和當前頁的屬性,該代碼工作正常。但我想添加這些屬性,這樣我就可以將一個漂亮的JSON對象傳遞迴客戶端。

有什麼想法?

+0

'數據= serializers.serialize( 'JSON',產品)'返回「列表「...所以不知道你想要這些額外的屬性去。 – 2011-03-01 04:25:46

回答

6

不知道,你想那些ATTRS去到該序列返回該「清單」。也許你希望數據是在最終結果的關鍵:

import json 

from django.core import serializers 

products = Product.objects.all() 
# data is a python list 
data = json.loads(serializers.serialize('json', products)) 
# d is a dict 
d = {} 
# data is a list nested in d 
d['results'] = data 
# more keys for d 
d['totalPages'] = 10          
d['currentPage'] = 1 
# data is a json string representation of the dict 
data = json.dumps(d)          

也許你可以找到在聚集和註釋使用:http://docs.djangoproject.com/en/dev/topics/db/aggregation/

更新:請注意,默認的序列的行爲可能不成爲你想成爲的人。 django.utils.simplejson.encoder中的代碼是高度優化的,但我不太確定如何使其使用自定義屬性等。在過去,我剛剛在模型類上創建了一個方法/屬性,將實例中的數據轉換爲包含我想要的字典。所以,與其

data = json.loads(serializers.serialize('json', products)) 

您可以使用(前提是你已經定義了一個方法,as_dict產品):

data = [p.as_dict() for p in products] 
+0

這爲所有產品增加了一個項目。如果你必須在每個產品的json對象中顯示一個名爲profit的屬性,那麼你會怎麼做?根據某些邏輯,它會計算每個產品條目的利潤? – mohi666 2012-04-27 01:07:53

+0

@ mohi666,我更新了你的案例的答案。 – 2012-04-28 02:50:58

0

一個未經考驗的瞎猜...

data = serializers.serialize('json', {'total':10,'current':1,'products':list(products)}) 
+0

我也這麼認爲,但實際上已經嘗試過了,序列化程序*只支持django模型。 – tangentstorm 2011-03-01 02:40:02

+0

現在已經太晚了,但是如果強制它通過「list」將查詢集解析爲django模型呢?查看更新的答案。 – 2011-03-01 22:40:37