首页 > 解决方案 > 如何使用序列化仅序列化某些字段?

问题描述

假设我有一个序列化程序

class ProductSerializer(serializers.ModelSerializer):
    product_brand = serializers.StringRelatedField()
    product_type = serializers.StringRelatedField()

    class Meta:
        model = Product
        fields = '__all__'

我想对其他序列化程序使用相同的序列化程序,但我只需要从中获取 product_type 即:

class ItemSerializer(serializers.ModelSerializer):
    product = ProductSerializer( # only get product_type)
    ...

    class Meta:
        model = Item
        fields = '__all__'

想要的结果是:

{
    ...
    "product": {
        "product_type": "Random"
    }
}

标签: djangodjango-rest-framework

解决方案


如果要获取此数据:

{
    ...
    "product": {
        "product_type": "Random"
    }
}

您可以使用此序列化程序:

class ProductSerializer(serializers.ModelSerializer):
    product_brand = serializers.StringRelatedField()

    class Meta:
        model = Product
        fields = ('product_brand', )

class ItemSerializer(serializers.ModelSerializer):
    product = ProductSerializer()
    ...

    class Meta:
        model = Item
        fields = '__all__'

此外,您可以简化它:

class ItemSerializer(serializers.ModelSerializer):
    product_type = serializers.CharField(source="product.product_type")
    ...

    class Meta:
        model = Item
        fields = '__all__'

你会得到这样的结果:

{
    ...
    "product_type": "Random"
}

推荐阅读