DjangoRestFramework序列化程序正在打印元组而不是json

我有以下序列化程序:

from rest_framework import serializers

from .models import Product

class ProductSerializer(serializers.ModelSerializer):
    """ Serializer for Product object """

    class Meta:
        model = Product
        fields = ['name', 'slug', 'description', 'image', 'price', 'active',]

以及以下测试:

from django.test import TestCase
from django.urls import reverse
from rest_framework.test import APIClient
from rest_framework import status

from .factories import ProductFactory
from .models import Product
from .serializer import ProductSerializer

PRODUCTS_URL = reverse('product-list')

def create_product(**params):
    """ Helper function to create a new product """
    return Product.objects.create(**params)

class PublicProductApiTests(TestCase):
    """
    Test the public products' API
    """

    def setUp(self):
        self.client = APIClient()

    
    def test_only_active_products_are_returned(self):

        ProductFactory.create_batch(2)
        
        products = Product.objects.all()
        serializer = ProductSerializer(products, many=True)

        print(serializer.data)

当我serializer.data在屏幕上打印时,我得到:

[OrderedDict([('name', 'Shane Fields'), ('slug', 'shane-fields'), ('description', '有机会参加会议。'), ('image', '/media/position /school.tiff'), ('price', '2.66'), ('active', False)]), OrderedDict([('name', 'Michael Hall'), ('slug', 'michael-hall '), ('description', '办公城市资料室字号原因。'), ('image', '/media/American/know.txt'), ('price', '-90244357.41'), ( '活动',真)])]

将查询集传递给序列化程序并打印其数据后,不应该以 JSON 格式打印吗?我错过了什么?

回答

您的解决方案没有任何问题,因为序列化程序数据始终返回有序的 dict 类型的序列化数据。的视图集rest_framework将为您处理它并将此对象重新格式化为 json 类型(例如,当您拥有return Response(serializer.data)它时,会将所有输入数据格式更改为 json 格式)。如果您想查看数据的 json 格式,有很多方法,例如:

import json

data = json.dumps(serializer.data)

print(data)  # which will print json format of your data

或者您可以使用print(dict(serializer.data[0])或 任何其他索引将其格式更改为字典类型。但是如果你想测试你的端点,你应该使用 rest API 测试用例,然后在你的测试用例中断言你的响应。有关更多信息,您可以使用有关其内置测试用例的其余框架文档。


以上是DjangoRestFramework序列化程序正在打印元组而不是json的全部内容。
THE END
分享
二维码
< <上一篇

)">
下一篇>>