Python 3.x 如何使用序列化程序生成对象的基本字段的简单列表
我正在用Django Rest框架为我的客户机创建Rest API,在创建它的结构时我感到困惑。我想要一个类似于DRF序列化程序的结构: 我的序列化程序如下所示:Python 3.x 如何使用序列化程序生成对象的基本字段的简单列表,python-3.x,django-rest-framework,django-serializer,Python 3.x,Django Rest Framework,Django Serializer,我正在用Django Rest框架为我的客户机创建Rest API,在创建它的结构时我感到困惑。我想要一个类似于DRF序列化程序的结构: 我的序列化程序如下所示: class GoodBoyToysSerializer(serializers.Serializer): name = serializers.CharField() class GoodBoysSerializer(serializers.ModelSerializer): toys = serializers.
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
class GoodBoysSerializer(serializers.ModelSerializer):
toys = serializers.SlugRelatedField(
read_only=True,
many=True,
slug_field='name'
)
class Meta:
model = GoodBoy
fields = ['id', 'name', 'toys']
它返回:
[
{
"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 3,DRF尝试在序列化程序中返回列表: 类GoodBoysSerializers.ModelSerializer: toys=序列化程序。SerializerMethodField 戴上玩具,好孩子: queryset=玩具。物体。过滤器好孩子=好孩子 返回queryset.values\u list'name',flat=True
有几种解决方案是可能的。其中之一是使用SlugRelatedField 根据文件: SlugRelatedField可用于使用目标上的字段表示关系的目标 就我而言,它看起来像:
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
class GoodBoysSerializer(serializers.ModelSerializer):
toys = serializers.SlugRelatedField(
read_only=True,
many=True,
slug_field='name'
)
class Meta:
model = GoodBoy
fields = ['id', 'name', 'toys']
如果需要slug_字段。它将返回相同的结果
还可以将查询集作为相关字段的参数传递