问题描述
我有一个CustomerSerializer
,它使用反向外键字段images
返回所有关联的Image
对象。
class CustomerSerializer(serializers.ModelSerializer):
class Meta:
model = Customer
fields = ('id','name','images')
read_only_fields = ('id',)
class ImageSerializer(serializers.ModelSerializer):
class Meta:
model = Image
fields = ('id','customer')
read_only_fields = ('id',)
这是我从响应中得到的:
[
{
'id': 1,'name': 'John Doe','images': [
1,2,3,4,...
]
}
...
]
问题:我不仅要显示images
作为id
的列表,还如何显示不同的属性,即name
?
所需的结果将是:
[
{
'id': 1,'images': [
'foo.jpg','bar.jpg','foobar.jpg','lorem.jpg',...
]
}
...
]
我的第一次尝试-我用images
中的image_names
替换了反向外键SerializerMethodField()
,以选择字段name
,但得到了{{1 }}值。
null
其他信息
示例模型:
class CustomerSerializer(serializers.ModelSerializer):
image_names = serializers.SerializerMethodField()
def get_image_names(self,obj):
return obj.images.name
class Meta:
model = Customer
fields = ('id','image_names')
read_only_fields = ('id',)
请让我知道是否有任何不清楚的地方,我将更新问题。谢谢。
解决方法
您需要制作另一个如下的序列化器
class ImageSerializer(serializers.ModelSerializer):
class Meta:
model = Image
fields = ('name',)
然后按如下所示更新您的Customerizerializer
class CustomerSerializer(serializers.ModelSerializer):
images = ImageSerializer(many=True,read_only=True)
class Meta:
model = Customer
fields = ('id','name','images')
方法2:
class CustomerSerializer(serializers.ModelSerializer):
images = serializers.SerializerMethodField()
class Meta:
model = Customer
fields = ('id','images')
def get_images(self,obj):
image_names = obj.images.all().values_list('name',flat=True)
return image_names