gpt4 book ai didi

json - 是否可以在 django-rest-framework 序列化程序中动态更改字段名称?

转载 作者:行者123 更新时间:2023-12-03 15:46:07 24 4
gpt4 key购买 nike

我有 ProductProductCategory楷模。

假设我有 ProductCategory TV , 其中有Sony , Samsung作为其产品。我也有MobilePhone类别与 AppleNokia作为其产品。
使用 DRF,我想使用序列化程序获取 JSON 输出,类似于以下内容:

{
'TV':
[
'Sony':
{
'price': '$100',
'country': 'Japan',
},
'Samsung':
{
'price': '$110',
'country': 'Korea',
}
]

'mobile_phone':
[
'Apple':
{
'price': '$300',
'country': 'USA',
},
'Nokia':
{
'price': '$210',
'country': 'Finland',
}
]
}

这里的问题是字段名称 ('TV', 'mobile_phone')在序列化程序中必须是动态的。

我知道我可以获得以下 JSON 类型
{ 
[
{
'product_category': 'TV',
'manufacturer: 'Sony',
'price': '$100',
'country': 'Japan',
},
{
'product_category': 'TV',
'manufacturer: 'Samgsung',
'price': '$110',
'country': 'Korea',
}
]

[
{
'product_category': 'mobile_phone',
'manufacturer: 'Samgsung',
'price': '$300',
'country': 'USA',
},
{
'product_category': 'mobile_phone',
'manufacturer: 'Apple',
'price': '$210',
'country': 'Finland',
}
]
}


class CategorySerializer(serializers.Serializer):
product_category = serializer.CharField()
manufacturer = serializer.CharField()
price = serializer.CharField()
country = serializer.CharField()

但是动态变化的字段名很难实现。有什么办法可以做到这一点吗?

最佳答案

您可以通过 支持这种自定义格式覆盖 to_representation您的序列化程序和默认的 ListSerializer :

  • 首先,您覆盖 to_representation 您的序列化程序:
    class CategorySerializer(serializers.Serializer):
    # your fields here

    def to_representation(self, obj):
    return {
    obj.manufacturer: {
    'price': obj.price,
    'country': obj.country
    }
    }

    使您的序列化类别具有以下形式:
    {
    'Sony': {
    'price': '$100',
    'country': 'Japan'
    }
    }
  • 然后在前面加上 product_category在您的列表前面,您可以使用自定义 ListSerializer 带定制 to_representation :
    class CategoryListSerializer(serializers.ListSerializer):

    def to_representation(self, data):
    # Group your data entries by category here
    ...
    return {
    'TV': tv_data
    'mobile_phone': mobile_data
    }

    class CategorySerializer(serializers.Serializer):
    ...
    class Meta:
    list_serializer_class = CategoryListSerializer
  • 关于json - 是否可以在 django-rest-framework 序列化程序中动态更改字段名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43157028/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com