当前位置: 首页 > article >正文

django drf to_internal_value

使用场景

用于将接收到的输入转换为内部可用的数据形式

例子

to_internal_value主要在反序列化时用到,其作用处理API请求携带的数据,对其进行验证并转化为Python的数据类型。

假如我们的API客户端通过请求提交了额外的数据,比如extra_info字段,如下所示:

{
    "extra_info": {
        "msg": "Hello world!",
    },

    "data": {
        "name ": "liuyongzhan",
        "status ": "active",
        "liked_by": [2, 3, 4]
    }
}

由于extra_info字段不属于我们TestSerializer类里的字段,如果我们直接使用TestSerializer类对上述数据进行反序列化会出现错误。

事实上反序列化时我们只需要提取data然后对其反序列化即可,所以我们可以重写to_internal_value提取我们所需要的数据,忽略不想要的数据。

from django.db import models

class TestModel(models.Model):
   name = models.CharField(_("名称"), max_length=50, null=True, blank=True, default="")
   status = models.CharField(_("状态"), max_length=10, null=True)
   create_by = models.ForeignKey(to='users.User', on_delete=models.SET_NULL, null=True)
   liked_by = models.ManyToManyField(to='users.User')




from rest_framework import serializers


class TestSerializer(serializers.ModelSerializer):
  class Meta:
      model = TestModel
      fields = '__all__'

  def to_internal_value(self, data):
      # 提取所需要的数据,对其进行反序列化,data代表未验证的数据
      article_data = data['data']
      return super().to_internal_value(article_data)


http://www.kler.cn/news/322000.html

相关文章:

  • YOLOv8+注意力机制+PyQt5玉米病害检测系统完整资源集合
  • 微信小程序-WebSocket
  • git diff 命令
  • 【逐行注释】MATLAB的程序,对比EKF(扩展卡尔曼滤波)和PF(粒子滤波)的滤波效果,附下载链接
  • ruoyi源码解析学习 - 微服务版 - ruoyi-gateway
  • 【人工智能】多模态AI:如何通过融合文本、图像与音频重塑智能系统未来
  • Qt系统相关——QFile和QFileInfo
  • 笔记整理—内核!启动!—linux应用编程、网络编程部分(5)系统时间与信息
  • Django 依赖库管理
  • 【计网】从零开始掌握序列化 --- 基础知识储备与程序重构
  • Ubuntu24.04下安装Budgie桌面的注意事项
  • 【C++掌中宝】深入理解函数重载:概念、规则与应用
  • Map和Set,TreeMap和TreeSet,HashMap和HashSet
  • Docker安装和配置MySQL 5.7的完整指南
  • 【Unity与数据库01】开发者如何选择数据库
  • 深度学习:(五)初识神经网络
  • Unity2022.3.x各个版本bug集合及推荐稳定版本
  • 使用jQuery处理Ajax
  • kotlin——设计模式之责任链模式
  • 数据结构之二叉树(1)
  • 本地生活服务项目揭秘!谁搭建的本地生活服务商作业系统收益效果好?
  • 使用ELK Stack进行日志管理和分析:从入门到精通
  • JDK7和JDK8中的HashMap有什么区别?
  • 初学51单片机之I2C总线与E2PROM
  • Java 使用 Graham 扫描的凸包(Convex Hull using Graham Scan)
  • 【小bug】使用 RestTemplate 工具从 JSON 数据反序列化为 Java 对象时报类型转换异常
  • git 清除二进制文件的 changes 状态
  • [笔记]某华AICrane系统全景笔记
  • 鸿蒙界面开发(九):列表布局 (List)
  • 数据结构 - 查找算法