将带有外键的对象序列化为json

时间:2012-07-21 11:31:15

标签: django

这是在Django:

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

我想保存一次往返网络服务的往返,并将两个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相关的东西,指出了这一点为什么......即使我不是继承,但同样的过程也适用于我的情况。希望这有助于其他人。我很快就会发布这个答案。

1 个答案:

答案 0 :(得分: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')

希望这有助于其他人。