2012-07-21 39 views
0

這是在Django:序列化與外鍵的對象爲JSON

data = [] 
data += serializers.serialize("json", conversation_deal) 
data += serializers.serialize("json", deal_statuses) 
dat = serializers.serialize("json", data) 
return HttpResponse(dat) 

我想一個往返保存到Web服務和兩個jsons合二爲一。 我試圖做的是將每個對象序列化成json,並將它們添加到數組中,然後再將它們序列化爲json。但它引發了一個異常。

我也嘗試將兩個python對象放入數組中,並將它們全部序列化爲json,這也失敗了。

這通常如何完成?

更新:

例外:

str: 'str' object has no attribute '_meta' 

更新2:

我有一些更多的信息,似乎它在某種程度上Django的有關它系列化對象的方式。

以下工作完全正常:

deal_statuses = DealStatus.objects.all()   
data = serializers.serialize("json", deal_statuses) 
return HttpResponse(data) 

但失敗..

conversation_deal = Conversation_Deal.objects.filter(conversation_id__in=call_id) 
data = serializers.serialize("json", conversation_deal) 
return HttpResponse(data) 

這是Conversation_Deal是如何建模:

class Conversation_Deal(models.Model): 
    conversation  = models.ForeignKey('Conversation') 
    deal    = models.ForeignKey('Deal') 
    status    = models.ForeignKey(DealStatus, null=True, blank=True) 

我發現了一些有關繼承的類documentation指出這爲什麼......即使我不是繼承,BU同樣的過程在我的情況下工作。希望這可以幫助別人。我會很快發佈這個答案。

+0

如果你顯示你得到的異常(和回溯),你會得到更好的幫助。 – 2012-07-21 11:33:56

+0

「失敗」是什麼意思?序列化,還是對web服務的調用?如果是後者,則需要提供有關該服務的更多信息;它可能只是不支持你正在嘗試的那種呼叫。 – 2012-07-21 11:36:12

+0

@Kave:這不是一個實際的例外,它當然不是一個完整的追溯。確實,更多的實際信息將有所幫助。 – 2012-07-21 11:41:43

回答

0

我找到了解決方案。

由於Conversation_Deal具有DealStatus類的外鍵,所以字面意思。它需要在序列化過程中瞭解它。

all = list(Conversation_Deal.objects.filter(conversation_id__in=call_id)) + list(DealStatus.objects.all()) 
return HttpResponse(simplejson.dumps(to_json), mimetype='application/json') 

希望這可以幫助別人。