如何使用序列化程序简单列出对象的原始字段

问题描述 投票:0回答:1

我正在使用Django Rest Framework为我的客户创建Rest API,并且在创建其结构时感到困惑。我想要一个带有DRF Serializers的结构:

[
    {
        "id": 1,
        "name": "Alan",
        "toys": [
            "Robocop",
            "Ninja",
            "Megalodon"
        ]
    },
    {
        "id": 2,
        "name": "John",
        "toys": [
            "Avatar",
            "Donatello Turtle",
            "Super Mario"
        ]
    },
]

我的序列化器看起来像:

class GoodBoyToysSerializer(serializers.Serializer):
    name = serializers.CharField()


class GoodBoysSerializer(serializers.ModelSerializer):
    toys = serializers.SerializerMethodField()

    def get_toys(self, good_boy):
        queryset = Toy.objects.filter(good_boy=good_boy)
        serializer = GoodBoyToysSerializer(queryset, many=True)
        return serializer.data

返回:

[
    {
        "id": 1,
        "name": "Alan",
        "toys": [
            { "name": "Robocop" },
            { "name": "Ninja" },
            { "name": "Megalodon" },
        ]
    },
    {
        "id": 2,
        "name": "John",
        "toys": [
            { "name": "Avatar" },
            { "name": "Donatello" },
            { "name": "Super Mario" },
        ]
    },
]

我该怎么办?我尝试使用ListSerializer等。但是,不幸的是,所有这些都没有用。

[Python 3DRF

python-3.x django-rest-framework django-serializer
1个回答
0
投票

尝试在序列化程序中返回列表:

class GoodBoysSerializer(serializers.ModelSerializer):
    toys = serializers.SerializerMethodField()

    def get_toys(self, good_boy):
        queryset = Toy.objects.filter(good_boy=good_boy)
        return queryset.values_list('name', flat=True)
© www.soinside.com 2019 - 2024. All rights reserved.