You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 04:07:34