首页 > 解决方案 > Django 自定义字典响应

问题描述

我正在使用 Django 休息框架,我有一个以字典格式返回信息的视图。这是我的模型:

class Child(models.Model):
    name = models.CharField(max_length=50, unique=True)
    age = models.IntegerField(null=False, blank=False)
    height = models.IntegerField(null=False, blank=False)

我想将以下响应作为字典返回,其中name字段是键:

{
    "Alice Allen": {
        "age": 3,
        "height": 98
    },
    "Bob Brady": {
        "age": 4,
        "height": 105
    }
}

我知道我可以使用 GenericAPIView 并在“get”方法中实现逻辑(获取数据并解析成字典),但我想知道是否有另一种使用 Django 序列化程序的解决方案。

谢谢。

标签: pythondjangodjango-rest-frameworkdjango-serializer

解决方案


如果您使用的是视图集,您可以尝试覆盖该list方法并自定义响应:

class ChildViewSet(viewsets.ModelViewSet):

    def list(self, request, *args, **kwargs):
        response = super(ChildViewSet, self).list(request, *args, **kwargs)
        response.data = {result.pop('name'): result for result in response.data}
        return response

推荐阅读