【问题标题】:Django REST Framework: nested serializer not serializingDjango REST Framework:嵌套序列化程序不序列化
【发布时间】:2017-03-05 19:11:27
【问题描述】:

我对 Django REST Framework 嵌套序列化程序有点吃不消。

我有一个名为 ProductSerializer 的序列化程序。它是一个 serializers.ModelSerializer,单独使用时会正确产生以下输出:

{'id': 1, 'name': 'name of the product'}

我正在构建一个购物车/购物篮功能,我目前有以下课程:

class BasketItem:

    def __init__(self, id):
        self.id = id
        self.products = []

还有一个序列化器:

class BasketItemSerializer(serializers.Serializer):
   id = serializers.IntegerField()
   products = ProductSerializer(many=True)

我有一个涉及以下代码的测试用例:

products = Product.objects.all()  # gets some initial product data from a test fixture

basket_item = BasketItem(1)  # just passing a dummy id to the constructor for now
basket_item.products.append(products[0])
basket_item.products.append(product1[1])

ser_basket_item = BasketItemSerializer(basket_item)

上面的产品是models.Model。现在,当我这样做时

print(ser_basket_item.data)

{'id': 1, 'products': [OrderedDict([('id', 1), ('name', 'name of the product')]), OrderedDict([('id', 2), ('name', 'name of the product')])]}

我的期望更像是:

{
    'id': 1,
    'products': [
        {'id': 1, 'name': 'name of the product'}
        {'id': 2, 'name': 'name of the product'}
    ]
}

你认为我哪里错了?

【问题讨论】:

    标签: python json django serialization django-rest-framework


    【解决方案1】:

    一切都很好。

    只是为了保持顺序,DRF 不能使用基本字典,因为它们不保持顺序。在那里你会看到一个 OrderedDict。

    您的渲染器会处理这些并输出正确的值。

    【讨论】:

    • 该死的。在这里,我在咒骂 django 做得比我实际要求的要好。用 json.dumps 确认是的,先生,确实是对的 :) 谢谢!
    猜你喜欢
    • 1970-01-01
    • 2014-12-21
    • 2016-02-09
    • 2018-07-06
    • 1970-01-01
    • 2017-07-28
    • 2023-03-24
    • 1970-01-01
    • 2018-06-23
    相关资源
    最近更新 更多