class Merchant(models.Model):"""商家"""name = models.CharField(max_length=200,verbose_name='商家名称',null=False)address = models.CharField(max_length=200,verbose_name='商家',null=False)logo = models.CharField(max_length=200,verbose_name='商家logo',null=False)notice = models.CharField(max_length=200, verbose_name='商家的公告',null=True,blank=True)up_send = models.DecimalField(verbose_name='起送价',default=0,max_digits=6,decimal_places=2)lon = models.FloatField(verbose_name='经度')lat = models.FloatField(verbose_name='纬度')create_time = models.DateTimeField(auto_now=True,null=True)class GoodsCategory(models.Model):"""商家商品分类"""name = models.CharField(max_length=20,verbose_name='分类名称')merchant = models.ForeignKey(Merchant,on_delete=models.CASCADE,verbose_name='所属商家',related_name='categories')
class GoodsCategorySerializer(serializers.ModelSerializer):class Meta:model = GoodsCategoryfields = "__all__"

http://127.0.0.1:8000/serializerapp/category/

嵌套

class GoodsCategorySerializer(serializers.ModelSerializer):merchant = MerchantSerializer(read_only=True)class Meta:model = GoodsCategoryfields = "__all__"

post请求报错

# 【DRF】序列化-序列化的嵌套
class GoodsCategorySerializer(serializers.ModelSerializer):merchant = MerchantSerializer(read_only=True)merchant_id = serializers.IntegerField(write_only=True)class Meta:model = GoodsCategoryfields = "__all__"# 验证商家id是否存在def validated_merchant_id(self,value):# 如果没有抛出异常if not Merchant.objects.filter(pk=value).exists():raise serializers.ValidationError("商家不存在")return valuedef create(self, validated_data):merchant_id = validated_data.get("merchant_id")merchant = Merchant.objects.get(pk=merchant_id)category = GoodsCategory.objects.create(**validated_data,merchant=merchant)return category

获取分类“酒” 各类酒商品

{"id": 207,"merchant": {"id": 31,"name": "肯德基(花城店)","address": "湖南省长沙市天心区花城路211号","logo": "http://p1.meituan.net/xianfu/33c48a92a31a21e4bf32d3aa7c1c5c0d16649.jpg","notice": "欢迎关林肯德基宅急送,专业外送,全程保温,准时送达!","up_send": "0.00","lon": 22.0,"lat": 22.0,"create_time": null},"goods_list": [{"id": 2011,"name": "百威啤酒T","picture": "http://p1.meituan.net/xianfu/8fd48d2e154953ed306126e2a1eebeb159392.jpg","intro": "主要原料:百威啤酒500毫升\r\n未成年人请勿饮酒,孕妇和身体不适者不宜饮酒。喝酒请勿驾车,请适度享用美酒,产品及包装以实物为准。","price": "15.00","category": 207}],"name": "炸鸡啤酒"},
class GoodsSerializer(serializers.ModelSerializer):class Meta:model = Goodsfields = "__all__"# 【DRF】序列化-序列化的嵌套
class GoodsCategorySerializer(serializers.ModelSerializer):merchant = MerchantSerializer(read_only=True)merchant_id = serializers.IntegerField(write_only=True)goods_list = GoodsSerializer(many=True,read_only=True)class Meta:model = GoodsCategoryfields = "__all__"# 验证商家id是否存在def validated_merchant_id(self,value):# 如果没有抛出异常if not Merchant.objects.filter(pk=value).exists():raise serializers.ValidationError("商家不存在")return valuedef create(self, validated_data):merchant_id = validated_data.get("merchant_id")merchant = Merchant.objects.get(pk=merchant_id)category = GoodsCategory.objects.create(**validated_data,merchant=merchant)return category

关于read_only 和write_only

read_only 这个字段只能读,只有返回返回数据的时候会使用

write_only=True 这个字段只能被写,只有在新增数据或者更新数据的时候被调用

验证:

1.验证在Field 中通过参数的形式进行指定,比如required等

2.通过重写validate(self,attrs) 方法 进行验证,attrs中包含所有字段,如果验证不通过,那么调用rasie serializer.ValidationError('error')

3.重写validate_字段名 对某个字段进行验证

请求与响应

序列化-序列化的嵌套相关推荐

  1. 什么是序列化? 如何实现(反)序列化 序列化的应用

    1. 什么是序列化与反序列化,什么情况需要序列化 1.1 序列化 序列化是什么 序列化的目的 什么情况需要序列化 1.2 反序列化 反序列化是什么 反序列化的目的 2. Java中的序列化与反序列化 ...

  2. python php 序列化,序列化和反序列化的详细介绍

    一.序列化和反序列化的概念 把对象转换为字节序列的过程称为对象的序列化. 把字节序列恢复为对象的过程称为对象的反序列化. 对象的序列化主要有两种用途: 1) 把对象的字节序列永久地保存到硬盘上,通常存 ...

  3. c语言 序列化,序列化和反序列化

    定义以及相关概念 互联网的产生带来了机器间通讯的需求,而互联通讯的双方需要采用约定的协议,序列化和反序列化属于通讯协议的一部分.通讯协议往往采用分层模型,不同模型每层的功能定义以及颗粒度不同,例如:T ...

  4. php soapclient 参数,序列化 – 序列化PHP SOAPClient对象

    我正在编写一个PHP应用程序,它使用许多SOAP Web服务来收集数据. 我在实例化所有这些对象时会遇到很大的开销:在某些情况下,单行代码$object = new SoapClient($wsdl) ...

  5. drf3 Serializers 序列化组件

    为什么要用序列化组件 做前后端分离的项目,我们前后端交互一般都选择JSON数据格式,JSON是一个轻量级的数据交互格式. 给前端数据的时候都要转成json格式,那就需要对从数据库拿到的数据进行序列化. ...

  6. Code4Fun: 通过XML模板系统实现对象的灵活序列化

    通过替换事先定义的模板来生成XML文档的方法叫做"XML模板系统",这在PHP的开发中有广泛的应用,如PHP Smarty,在.Net上有NVelocity.作为完整的模板系统,他 ...

  7. 魔方APP项目-04-用户模块API接口、Marshmallow,基本构造器(Schema),Schema数据序列化、Schema数据反序列化、反序列化对数据验证、模型构造器(ModelSchema)

    用户模块 当前开发的项目属于社交类型项目,所以关于用户的信息和功能直接贯穿了整个项目.所以此处实现用户模块功能,我们先把用户基本信息构建起来,并通过基本信息实现用户注册登录相关功能,后面遇到业务再继续 ...

  8. Django REST Framework教程(4): 玩转序列化器(Serializer)

    在前面的文章中我们以博客为例,自定义了一个简单的 ArticleSerializer 类, 并分别以函数视图(FBV)和基于类的视图(CBV)编写了博客文章列表资源和单篇文章资源的API,支持客户端以 ...

  9. Effective java 总结11 - 序列化

    Effective java 总结11 - 序列化 序列化:对象 -> 字节流 反序列化:字节流 -> 对象 第85条 其他方法优先于java序列化 序列化的根本问题在于:攻击面过于庞大, ...

最新文章

  1. tls 禁用重协商_TLS Https连接失败问题(协商失败)
  2. 第一个VueJs入门页面
  3. java shp求相交面积_shp文件自相交处理的方法
  4. 文件存储的原理和记事本打开文件的原理
  5. webService学习7:调用天气接口
  6. MySql 踩坑小记 1
  7. UIBezierPath IOS贝塞尔曲线
  8. Web开发编程语言是最适合新手的吗-开课吧
  9. Windows系统命令整理-Win10
  10. [Windows Server 2012] SQL Server 备份和还原方法
  11. 数据中心淘汰服务器,浅谈数据中心危机严重的程度
  12. java web服务器热部署_Tomcat服务器热部署教程_如何实现tomcat热部署
  13. android excel在线制作教程,Excel手机表格制作软件
  14. 如何烧写Bubblegum-96 board
  15. macOS Ventura 13.0 (22A380) 正式版发布,ISO、IPSW、PKG 下载
  16. [蓝桥杯单片机 八位共阳数码管](4)
  17. PMP 第十三章项目干系人管理
  18. Hololens连接mysql_学校hololens开发项目:汽车发动机检修混合现实(MR)教学
  19. 当AD(Altium Designer)画PCB时Ctrl+H快捷键无法选中连线时的解决办法
  20. tushare更新,get_k_data支持分时k线数据,可替代以前的get_hist_data

热门文章

  1. 反向造IP的泡泡玛特,离中国的迪士尼还有多远?
  2. 崩溃bug日志总结1
  3. FreeBSD 下载 Exif扩展
  4. Oracle12c instant client和PL/SQL在windows下的安装和使用
  5. 使用家用路由器搭建虚拟服务器
  6. php gb28181,GB28181测试工具
  7. 重温c语言 谭浩强 输出魔方阵 目前只做了基数魔方 以及 双偶幻方,单偶同理
  8. 微信论坛小程序系统设计与实现
  9. HTML xmlns 属性
  10. H.Shifting