【问题标题】:Django REST framework serializer return format as list instead of JSONDjango REST 框架序列化程序返回格式为列表而不是 JSON
【发布时间】:2021-01-02 11:18:44
【问题描述】:

您好,我正在尝试使用 Django REST 框架开发一个简单的 REST API 端点。我尝试检查类似的问题,但没有成功。我希望我的输出为(JSON 格式):

{
    {
        "id": 1,
        "status": "ONLINE"
    },
    {
        "id": 2,
        "status": "OFFLINE"
    }
}

但我的输出是(列表格式):

[
    {
        "id": 1,
        "status": "ONLINE"
    },
    {
        "id": 2,
        "status": "OFFLINE"
    }
]

我的models.py:

class Device(models.Model):
    status = models.CharField(max_length=10, default="OFFLINE")

我的serializer.py:

class DeviceSerializer(serializers.ModelSerializer):
    class Meta:
        model = Device
        fields = '__all__'

和我的views.py:

def device_list(request):
    devices = Device.objects.all()
    serializer = DeviceSerializer(devices, many=True)
    return Response(serializer.data)

【问题讨论】:

  • 不知道你在问什么,预期和实际是相同的
  • 我想要的是JSON格式我得到的是List格式
  • 您误解了您的输出。第一个不是有效的 JSON,无法被浏览器读取或由 DRF 生成。

标签: python json django django-rest-framework


【解决方案1】:
def device_list(request):
    devices = Device.objects.all()
    serializer = DeviceSerializer(devices, many=True)
    return Response({"data":serializer.data})

【讨论】:

    【解决方案2】:

    您想要的输出不是有效的 json。 {} 用于字典、地图等...而 [] 用于列表。

    【讨论】: