如何从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
相关产品推荐
相关产品推荐

