serializers序列化

from rest_framework import serializers

class XXX(serializers.ModelSerializer):
    # 显示表名字段

    自定义反序列化方法:
    方法一:
	# 自定义序列化字段 (要再次处理的字段)
    gender = serializers.SerializerMethodField()
    def get_gender(self,obj):   # obj :单个表对象   获取第二值
        return obj.get_sex_display()

    方法二: (插拔式)
    @property    # 为自定义序列化字段 配置(插拔式 : 创建给任意对象使用,不会反序列化入库)--》提供校验
    def gender(self):
        return self.get_sex_display()

    re_pwd = serializers.CharField(required=True, write_only=True)

    # 图片显示全路径
    image_path = serializers.SerializerMethodField()
    def get_image_path(self, obj):
        # settings.MEDIA_URL: 自己配置的 /media/,给后面高级序列化与视图类准备的
        # obj.icon不能直接作为数据返回,因为内容虽然是字符串,但是类型是ImageFieldFile类型
        return '%s%s%s' % (r'http://127.0.0.1:8000', settings.MEDIA_URL, str(obj.image))

    class Meta:
        model = models.表名
        # 显示表包含所有字段
        fields = "__all__"
        # 明确排除掉哪些字段
        exclude = ('字段1', '字段2')
        # 显示指明字段
        fields = ('字段1', '字段2')
        # 指明只读字段
        read_only_fields = ()
        # 添加额外参数
        extra_kwargs = {
            write_only:只反序列化
            read_only:只序列化
            自定义字段默认只序列化(read_only)
        }
    # 局部钩子:validate_要校验的字段名(self, 当前要校验字段的值)
    # 校验规则:校验通过返回原值,校验失败,抛出异常
    def validate_字段名(self, value):
        内部逻辑
        return value

    # 全局钩子:validate(self, 通过系统与局部钩子校验之后的所有数据)
    def validate(self, attrs):  # attrs是字典格式
        内部逻辑
        return attrs

    # 注意:ModelSerializer类已经帮我们实现了 create 与 update 方法,不需要写create就能创建

posted @ 2021-01-25 14:39  啦啦哦  阅读(84)  评论(0编辑  收藏  举报