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

DjangoRestFramework & Javascript Fetch获取关联模型额外数据问题

解决方案

完全可以实现你需要的返回格式,Django REST Framework提供了多种关联字段序列化方案,以下是两种最简便的实现方式:

方案1:使用source参数直接映射关联字段(推荐)

这是最简洁的实现方式,不需要额外编写方法,直接在CarSerializer中新增字段映射关联表的name属性即可:

# serializers.py
from rest_framework import serializers
class CarSerializer(ModelSerializer):
    # 新增字段,source指定关联对象的属性,read_only设置为只读避免提交校验报错
    manufacturer__name = serializers.CharField(source='manufacturer.name', read_only=True)
    class Meta:
        model = Car
        exclude = [
            'date_created',
        ]

方案2:使用SerializerMethodField自定义字段逻辑

如果后续需要对关联字段做额外逻辑处理,可以用这种方式:

# serializers.py
from rest_framework import serializers
class CarSerializer(ModelSerializer):
    manufacturer__name = serializers.SerializerMethodField()
    def get_manufacturer__name(self, obj):
        # obj为当前Car实例,直接取关联的Manufacturer的name属性
        return obj.manufacturer.name
    class Meta:
        model = Car
        exclude = [
            'date_created',
        ]

性能优化建议

为了避免序列化时产生N+1查询问题,建议修改视图中的查询语句,用select_related提前加载关联的Manufacturer数据:

# views.py
@api_view(['GET'])
def api_list_card(request):
    # 用select_related提前拉取外键关联数据,减少数据库查询次数
    qs = Car.objects.select_related('manufacturer').all()
    serializer = CarSerializer(qs, many=True)
    return Response(serializer.data)

修改完成后接口返回的格式就和你期望的完全一致了。

内容的提问来源于stack exchange,提问作者finethen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 14:45:00