Django json序列化问题

时间:2010-12-25 07:50:06

标签: django json serialization

我在序列化django对象时遇到困难。问题是有外键。我希望序列化具有来自引用对象的数据,而不仅仅是索引。

例如,我希望赞助商数据字段说“sponsor.last_name,sponsor.first_name”而不是“13”。

如何修复序列化?

json数据: {“totalCount”:“2”,“activities”:[{“pk”:1,“model”:“app.activity”,“fields”:{“activity_date”:“2010-12-20”,“description “:”我的活动“,”赞助商“:13,”位置“:1,....

型号代码:

class Activity(models.Model): 
  activity_date = models.DateField()
  description = models.CharField(max_length=200)
  sponsor = models.ForeignKey(Sponsor)
  location = models.ForeignKey(Location)

class Sponsor(models.Model):
  last_name = models.CharField(max_length=20)
  first_name= models.CharField(max_length=20)
  specialty = models.CharField(max_length=100)

class Location(models.Model):
  location_num = models.IntegerField(primary_key=True)
  location_name = models.CharField(max_length=100)

def activityJSON(request):
    activities = Activity.objects.all()
    total = activities.count()
    activities_json = serializers.serialize("json", activities)
    data = "{\"totalCount\":\"%s\",\"activities\":%s}" % (total, activities_json)
    return HttpResponse(data, mimetype="application/json")

4 个答案:

答案 0 :(得分:2)

像这样添加与序列化程序的关系:

activities_json = serializers.serialize("json", activities, relations=('sponsor',))

然后您只需要:

return HttpResponse(activities_json, mimetype="application/json")

然后确保你还安装了django library wadofstuff。

希望这有帮助!

答案 1 :(得分:1)

The docs似乎解释了如何做到这一点。阅读关于自然键序列化的部分。

答案 2 :(得分:1)

这个小型lib非常方便django:http://code.google.com/p/wadofstuff/wiki/DjangoFullSerializers

它允许比标准编码器更多的自定义。

答案 3 :(得分:0)

any2any 还包含允许完全自定义输出格式的序列化程序: