django序列化外键对象

sta*_*orn 5 python django django-models django-serializer

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

在谷歌上我找到了这个链接,它解释了自然键的用法.但是我的问题是从外来物体中获取,django.contrib.auth.models.User所以它无济于事.

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

我的示例模型包含了username我希望删除的内容,而是通过外键获取它.

    user = models.ForeignKey(User)
    username = models.CharField(max_length=100, null=False)
Run Code Online (Sandbox Code Playgroud)

ben*_*nto 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')
Run Code Online (Sandbox Code Playgroud)

你需要导入json才能工作.

import json
Run Code Online (Sandbox Code Playgroud)