首页 > 解决方案 > Django:列出序列化程序

问题描述

我想用 Django 创建rest API。我听说过 Django Rest Framework 中的序列化程序:from rest_framework import serializers. 接下来,我必须创建某种模型。我想创建这种类型的 JSON 响应:

{
  id: "489",
  state: "PREPARATION",
  orderDay: "2020-06-24",
  deliveryDay: "2020-06-30",
  deliveryAddress: "Place des Fêtes",
  comment: "", // facultatif
  products: [
    {
      id: "420",
      name: "Côte de boeuf",
      price: "28.90",
      oldPrice: "", // facultatif
      unit: "KG",
      categoryId: "69666",
      byProducts: [
        {
          id: "420161",
          name: "unité",
          quantity: 42,
        },
      ],
    },
  ],
}

所以我必须在我的序列化程序模型(productsbyProduct)中添加一个列表。我可以用序列化器来做到这一点吗?如何?提前致谢

标签: pythondjangoapidjango-rest-frameworkserialization

解决方案


你可以通过实现这样的东西来实现这样的数据结构:

from rest_framework import serializers


class ByProductSerializer(serializers.Serializer):
    id = serializers.IntegerField()
    name = serializers.CharField()
    quantity = serializers.IntegerField()


class ProductSerializer(serializers.Serializer):
    id = serializers.IntegerField()
    name = serializers.CharField()
    price = serializers.DecimalField(decimal_places=2, max_digits=5)
    oldPrice = serializers.DecimalField(decimal_places=2, max_digits=5)
    unit = serializers.CharField()
    categoryId = serializers.IntegerField()
    byProducts = ByProductSerializer(many=True)


class MainSerializer(serializers.Serializer):
    id = serializers.IntegerField()
    state = serializers.CharField()
    orderDay = serializers.DateField()
    deliveryDay = serializers.DateField()
    deliveryAddress = serializers.DateField()
    comment = serializers.DateField()
    products = ProductSerializer(many=True)

推荐阅读