1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- # @Author : Rocky
- # @File : serializers.py
- # @Time : 2023/7/24 13:35
- from rest_framework.serializers import ModelSerializer, SerializerMethodField
- from background.models import ProductInfo, VideoInfo, QuickStartInfo, UpgradeFirmwareInfo
- class ReadWriteSerializerMethodField(SerializerMethodField):
- """
- 支持可读写的SerializerMethodField
- 可实现Model字段和Serializer字段更加灵活地解绑
- 通过实现get_xxxfield方法,实现从Model的某个字段读值映射到Serializer对应字段
- 通过实现set_xxxfield方法,实现从Serializer字段回填值到Model对应字段
- """
- def __init__(self, method_name=None, write_method_name=None, **kwargs):
- self.method_name = method_name
- self.write_method_name = write_method_name
- kwargs["source"] = "*"
- super(SerializerMethodField, self).__init__(**kwargs)
- def bind(self, field_name, parent):
- # 绑定读函数 get_{field_name} 和写函数 set_{field_name}
- default_method_name = f"get_{field_name}"
- default_write_method_name = f"set_{field_name}"
- if self.method_name is None:
- self.method_name = default_method_name
- if self.write_method_name is None:
- self.write_method_name = default_write_method_name
- super(SerializerMethodField, self).bind(field_name, parent)
- def to_representation(self, value):
- # 读取过程hook
- method = getattr(self.parent, self.method_name)
- return method(value)
- def to_internal_value(self, data):
- # 写入过程hook
- method = getattr(self.parent, self.write_method_name)
- return method(data)
- class ProductInfoSerializer(ModelSerializer):
- class Meta:
- model = ProductInfo
- fields = '__all__'
- class VideoInSerializer(ModelSerializer):
- class Meta:
- model = VideoInfo
- fields = '__all__'
- class QuickStartInfoSerializer(ModelSerializer):
- class Meta:
- model = QuickStartInfo
- fields = '__all__'
- class UpgradeFirmwareInfoSerializer(ModelSerializer):
- class Meta:
- model = UpgradeFirmwareInfo
- fields = '__all__'
|