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

Django Rest API问题:Serializer无法显示外键字段值

问题解决:FacilityAddressSerializer字段显示Null

核心原因

Facility模型通过related_name='fa'关联的是多个FacilityAddress实例(一对多关系),但你在序列化时未声明many=True参数,导致DRF无法正确序列化多对象集合,最终返回Null。

修复步骤

1. 修正序列化器的多对象处理

在FacilitySearchSerializer的AddressInfo字段中添加many=True,适配一对多的关联关系,同时可根据业务需求添加allow_null=True(允许无地址的情况):

class FacilitySearchSerializer(serializers.ModelSerializer):
    # 添加many=True处理多地址场景
    AddressInfo = FacilityAddressSerializer(source="fa", many=True, allow_null=True)
    class Meta:
        model = Facility
        fields = (
            "id",
            "Name",
            "AddressInfo",
            "ListingVerified",
            "mainimage",
            "AdministratorCell",
            "Capacity",
            "PriceRangeMin",
            "PriceRangeMax",
        )
        read_only_fields = ("id", "Name", "ListingVerified", "mainimage", "AdministratorCell", "Capacity", "PriceRangeMin", "PriceRangeMax")

2. 可选:移除冗余关联字段

FacilityAddressSerializer的fields中包含了AddressInfo(指向Facility的外键),如果业务不需要返回该关联数据,建议移除,避免不必要的嵌套和循环引用风险:

class FacilityAddressSerializer(serializers.ModelSerializer):
    class Meta:
        model = FacilityAddress
        fields = (
            "id",
            "PrimaryAddress",
            "SecondaryAddress",
            "City",
            "RegionOrState",
            "PostalCode",
            "Geolocation"
            # 移除AddressInfo字段,无需返回关联的Facility数据
        )

3. 验证数据库关联数据

确认目标Facility实例已在数据库中关联对应的FacilityAddress记录,若没有关联数据,即使代码正确,也会返回空列表(设置allow_null=True时会返回Null)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 15:06:29