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

如何从ModelSerializer获取单一值?CameraSerializer需扁平化数据

解决方案

你可以通过以下几种方式实现camera字段的扁平化输出,直接返回名称字符串:

方法1:使用CharField指定字段来源

直接通过source参数关联到Camera对象的name字段,这是最简洁的方式:

class VehicleAccessRecordInformationCSVSerializer(ModelSerializer):
    camera = serializers.CharField(source='camera.name', read_only=True)
    class Meta:
        model = VehicleAccessRecordInformation
        fields = ['timestamp', 'license_plate_characters', 'vehicle_type', 'camera']

方法2:使用StringRelatedField

如果你的Camera模型的__str__方法返回的是name字段值,可以直接用这个字段:

class VehicleAccessRecordInformationCSVSerializer(ModelSerializer):
    camera = serializers.StringRelatedField(read_only=True)
    class Meta:
        model = VehicleAccessRecordInformation
        fields = ['timestamp', 'license_plate_characters', 'vehicle_type', 'camera']

前提:Camera模型需定义如下__str__方法

class Camera(models.Model):
    name = models.CharField(max_length=100)
    # 其他字段...
    
    def __str__(self):
        return self.name

方法3:使用SerializerMethodField自定义返回逻辑

如果需要更灵活的处理逻辑(比如空值判断等),可以用自定义方法:

class VehicleAccessRecordInformationCSVSerializer(ModelSerializer):
    camera = serializers.SerializerMethodField(read_only=True)
    
    def get_camera(self, obj):
        # 可添加空值判断等逻辑
        return obj.camera.name if obj.camera else None
    
    class Meta:
        model = VehicleAccessRecordInformation
        fields = ['timestamp', 'license_plate_characters', 'vehicle_type', 'camera']

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 12:59:14