在序列化`ForeignKey`时有没有办法选择特定的表示?

时间:2016-01-31 22:38:47

标签: python json django

我在Django 1.9中有一个非常简单的模型(不使用任何其他RESTful框架或任何东西,因为我试图保持基础)。 User只是默认的Django-Auth用户。

class Post(models.Model):
    author = models.ForeignKey(User)
    text = models.TextField(null=True)
    created_at = models.DateTimeField(auto_now_add=True, null=True)
    modified_at = models.DateTimeField(auto_now=True, null=True)

在序列化JSON响应时,我使用以下视图:

items = []
for post in Post.objects.values():
    post['author'] = User.objects.get(pk=post['author_id']).username
    items.append(post)
return JsonResponse({'posts': items}, safe=False)

有没有办法跳过author_id的检索并重新插入author

1 个答案:

答案 0 :(得分:1)

我希望我能正确理解你。

这样做的正确方法是:

for post in Post.objects.values('id', 'name', 'author__username'):
    ...

如果没有您当前代码产生的其他查询,请添加post['author__username']

虽然,因为您正在编写RESTy框架,所以您可能关心密钥的命名。老实说,我没有比这更好的解决方案:

for post in ...:
    post['author'] = post['author__username']
    del post['author__username']