2010-10-28 52 views
1

建立在this question,現在我有另一個問題。鑑於此,Django:在JSON字符串中包含相關模型?

shipments = Shipment.objects.filter(filter).exclude(**exclude).order_by(order) \ 
    .annotate(num_bids=Count('bids'), min_bid=Min('bids__amount'), max_bid=Max('bids__amount')) \ 
    .select_related('pickup_address','dropoff_address','billing_address') 

return HttpResponse(simplejson.dumps(list(shipments.values()), ensure_ascii=False, default=json_formatter), mimetype='application/json') 

它實際上並不包括pickup_address等在JSON中。我怎樣才能讓它包含相關的字段?

回答

1

您可以使用充滿發貨字典的列表理解並填寫相關對象。此API爲客戶端提供每個地址的顯式名稱。定位符號使得發送到帳單地址變得非常容易。 Josh Block's "How to Design a Good API and Why it Matters"值得一讀。

shipments = [{ 
    'shipment':s, 
    'pickup_address': s.pickup_address, 
    'dropoff_address': s.dropoff_address, 
    'billing_address': s.billing_address, 
} for s in shipments] 

return HttpResponse(simplejson.dumps(shipments, ensure_ascii=False, default=json_formatter), mimetype='application/json') 
+0

一個貨件有25個字段......我希望我可以避免寫出來。 – mpen 2010-10-28 02:52:16

+0

您可以將此方法與Djangos內置序列化一起使用,http://docs.djangoproject.com/zh/dev/topics/serialization/。它將負責序列化模型。 – knutin 2010-10-28 06:24:17

+0

沒關係..這種方法實際上*確實*爲我工作..無論如何,我將太多數據傳遞給我的觀點..其中一些我實際上想保密。 – mpen 2010-10-28 06:41:02