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

如何在Django嵌套序列化器中仅获取子序列化器的指定字段?

在Django序列化器中仅嵌套关联模型的指定字段

有几种简单的方法可以实现这个需求:

方法一:创建精简版嵌套序列化器

专门写一个只包含你需要字段的序列化器,替换原来的RestSerializer:

# 先定义精简版的Rest序列化器
class RestMinimalSerializer(serializers.ModelSerializer):
    class Meta:
        model = Rest  # 替换为你的Rest模型类
        fields = ('id', 'name')  # 填写你需要的字段

# 修改ShopSerializer使用这个精简版
class ShopSerializer(serializers.ModelSerializer):
    rest = RestMinimalSerializer(many=True)
    class Meta:
        model = RestaurantLike
        fields = ('id', 'created', 'updated', 'rest')

方法二:用SerializerMethodField手动构造返回内容

如果不想额外定义序列化器,可以手动遍历关联对象,只返回需要的字段:

class ShopSerializer(serializers.ModelSerializer):
    rest = serializers.SerializerMethodField()
    
    def get_rest(self, obj):
        # 遍历所有关联的rest实例,生成只含指定字段的字典列表
        return [{'id': item.id, 'name': item.name} for item in obj.rest.all()]
    
    class Meta:
        model = RestaurantLike
        fields = ('id', 'created', 'updated', 'rest')

方法三:直接指定单个关联字段(适用于只需要单个字段的场景)

如果只需要关联模型的某一个字段(比如id),可以直接用字段关联的方式:

class ShopSerializer(serializers.ModelSerializer):
    # 示例:只返回rest的id列表
    rest_ids = serializers.PrimaryKeyRelatedField(source='rest', many=True, read_only=True)
    # 如果需要其他字段,比如名称:
    # rest_names = serializers.CharField(source='rest.name', many=True, read_only=True)
    
    class Meta:
        model = RestaurantLike
        fields = ('id', 'created', 'updated', 'rest_ids')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 18:01:25