django序列化外键对象

时间:2012-05-08 21:44:43

标签: python django django-models django-serializer

有几个问题要求同样的事情。但它们是从2010年开始的,它对我帮助不大。所以我认为自2010年以来这可能是对这方面的一些更新?

在谷歌上我发现了这个link,它解释了natural keys的用法。但是我的问题是从django.contrib.auth.models.User获取异物,所以它无济于事。

我的问题如下。我想序列化QuerySet,所以我也得到了外键对象,因为我想把它作为JSON传递给客户端。来自django.core的序列化程序不会这样做。所以在我的情况下,仅仅是问题,我已经在模型中添加了另一个字段,以包含我需要的外来对象的值。但它引入了冗余数据。

我的示例模型包含username,如果可能的话,我会删除它,而是通过外键获取它。

    user = models.ForeignKey(User)
    username = models.CharField(max_length=100, null=False)

2 个答案:

答案 0 :(得分:6)

解决此问题的一种可能方法是根据查询集的返回值构建自己的字典对象。你会做这样的事情:

queryset = Model.objects.all()
list = [] #create list
for row in queryset: #populate list
    list.append({'title':row.title, 'body': row.body, 'name': row.user.username})
recipe_list_json = json.dumps(list) #dump list as JSON
return HttpResponse(recipe_list_json, 'application/javascript')

你需要导入json才能工作。

import json

答案 1 :(得分:1)

您可以使用Django REST框架' serializers