[英]How to serialize in Django Rest Framework with custom fields?
[英]Django Rest Framework - How to serialize nested fields
我有一个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', 'name', 'customer')
read_only_fields = ('id',)
这是我从响应中得到的:
[
{
'id': 1,
'name': 'John Doe',
'images': [
1,
2,
3,
4,
...
]
}
...
]
问题:除了将images
显示为id
列表之外,我如何显示不同的属性,即name
?
期望的结果是:
[
{
'id': 1,
'name': 'John Doe',
'images': [
'foo.jpg',
'bar.jpg',
'foobar.jpg',
'lorem.jpg',
...
]
}
...
]
我的第一次尝试 - 我用SerializerMethodField()
中的image_names
替换了反向外键images
,以便 select 字段name
,但我得到了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', 'name', 'image_names')
read_only_fields = ('id',)
附加信息
示例模型:
class Customer(models.Model):
name = models.CharField()
class Image(models.Model):
name = models.CharField()
customer = models.ForeignKey(
Customer, related_name='images', on_delete=models.CASCADE)
如果有任何不清楚的地方,请告诉我,我会更新问题。 谢谢你。
您需要制作另一个序列化程序,如下所示
class ImageSerializer(serializers.ModelSerializer):
class Meta:
model = Image
fields = ('name',)
然后如下更新您的 Customerserializer
class CustomerSerializer(serializers.ModelSerializer):
images = ImageSerializer(many=True, read_only=True)
class Meta:
model = Customer
fields = ('id', 'name', 'images')
方法二:
class CustomerSerializer(serializers.ModelSerializer):
images = serializers.SerializerMethodField()
class Meta:
model = Customer
fields = ('id', 'name', 'images')
def get_images(self, obj):
image_names = obj.images.all().values_list('name', flat=True)
return image_names
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.