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 @   啦啦哦  阅读(86)  评论(0编辑  收藏  举报
编辑推荐:
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
· .NET 适配 HarmonyOS 进展
阅读排行:
· 用 DeepSeek 给对象做个网站,她一定感动坏了
· DeepSeek+PageAssist实现本地大模型联网
· 手把手教你更优雅的享受 DeepSeek
· 腾讯元宝接入 DeepSeek R1 模型,支持深度思考 + 联网搜索,好用不卡机!
· 从 14 秒到 1 秒:MySQL DDL 性能优化实战
点击右上角即可分享
微信分享提示