Django Rest Framework - 用模型名称包装 JSON 响应

Django Rest Framework - Wrapping the JSON response with the name of the model

我的目标是在列出项目时自定义来自 Django DRF 的 JSON 响应。

型号:

class Object(models.Model):
    code = models.CharField(max_length=16, primary_key=True, unique=True)
    item = models.CharField(max_digits=128)
    last_updated = models.DateTimeField(auto_now=True, editable=False)

序列化器:

class ObjectSerializer(serializers.ModelSerializer):
    class Meta:
        model = Object
        fields = ['code', 'item']

观点:

class ObjectList(generics.ListAPIView):
    queryset = Object.objects.all()
    serializer_class = ObjectSerializer

    def list(self, request):
        queryset = self.get_queryset()
        serializer = ObjectSerializer(queryset, many=True)
        return Response(serializer.data)

使用此设置,JSON 响应为:

[
    {
        "code": "111",
        "item": "aaa"
    },
    {
        "code": "222",
        "item": "bbb"
    }
]

有没有办法用模型名称包装响应? 预期结果为:

"objects": [
    {
        "code": "111",
        "item": "aaa"
    },
    {
        "code": "222",
        "item": "bbb"
    }
]

您可以在视图级别自定义响应,只需将序列化程序的数据包装到外部字典中即可:

class ObjectList(generics.ListAPIView):
    queryset = Object.objects.all()
    serializer_class = ObjectSerializer

    def list(self, request):
        queryset = self.get_queryset()
        serializer = ObjectSerializer(queryset, many=True)
        return Response({"objects": serializer.data})