如何在Django序列化器中直接获取Logo URL而非嵌套对象?
解决Django序列化器嵌套Logo URL的问题
有两种简洁的方式可以实现你需要的结构:
方法一:使用SerializerMethodField
直接在CompanySerializer中自定义logo字段,手动提取关联Logo对象的URL:
from rest_framework import serializers class CompanySerializer(serializers.ModelSerializer): logo = serializers.SerializerMethodField() def get_logo(self, obj): # 处理Logo可能为null的情况,避免报错 return obj.logo.logo if obj.logo else None class Meta: model = Company fields = '__all__'
方法二:使用SlugRelatedField
由于Company和Logo是一对一关联,可以用SlugRelatedField直接指定要获取的目标字段:
from rest_framework import serializers class CompanySerializer(serializers.ModelSerializer): logo = serializers.SlugRelatedField( slug_field='logo', read_only=True ) class Meta: model = Company fields = '__all__'
两种方法都能让返回的JSON结构变为:
"logo": "www.s3bucket.com/url"
注意处理obj.logo为null的场景,避免触发AttributeError。
内容的提问来源于stack exchange,提问作者Edward
相关产品推荐
相关产品推荐

