2012-07-21 16 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') 

希望这可以帮助别人。