序列化-序列化的嵌套
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.2 反序列化 反序列化是什么 反序列化的目的 2. Java中的序列化与反序列化 ...
- python php 序列化,序列化和反序列化的详细介绍
一.序列化和反序列化的概念 把对象转换为字节序列的过程称为对象的序列化. 把字节序列恢复为对象的过程称为对象的反序列化. 对象的序列化主要有两种用途: 1) 把对象的字节序列永久地保存到硬盘上,通常存 ...
- c语言 序列化,序列化和反序列化
定义以及相关概念 互联网的产生带来了机器间通讯的需求,而互联通讯的双方需要采用约定的协议,序列化和反序列化属于通讯协议的一部分.通讯协议往往采用分层模型,不同模型每层的功能定义以及颗粒度不同,例如:T ...
- php soapclient 参数,序列化 – 序列化PHP SOAPClient对象
我正在编写一个PHP应用程序,它使用许多SOAP Web服务来收集数据. 我在实例化所有这些对象时会遇到很大的开销:在某些情况下,单行代码$object = new SoapClient($wsdl) ...
- drf3 Serializers 序列化组件
为什么要用序列化组件 做前后端分离的项目,我们前后端交互一般都选择JSON数据格式,JSON是一个轻量级的数据交互格式. 给前端数据的时候都要转成json格式,那就需要对从数据库拿到的数据进行序列化. ...
- Code4Fun: 通过XML模板系统实现对象的灵活序列化
通过替换事先定义的模板来生成XML文档的方法叫做"XML模板系统",这在PHP的开发中有广泛的应用,如PHP Smarty,在.Net上有NVelocity.作为完整的模板系统,他 ...
- 魔方APP项目-04-用户模块API接口、Marshmallow,基本构造器(Schema),Schema数据序列化、Schema数据反序列化、反序列化对数据验证、模型构造器(ModelSchema)
用户模块 当前开发的项目属于社交类型项目,所以关于用户的信息和功能直接贯穿了整个项目.所以此处实现用户模块功能,我们先把用户基本信息构建起来,并通过基本信息实现用户注册登录相关功能,后面遇到业务再继续 ...
- Django REST Framework教程(4): 玩转序列化器(Serializer)
在前面的文章中我们以博客为例,自定义了一个简单的 ArticleSerializer 类, 并分别以函数视图(FBV)和基于类的视图(CBV)编写了博客文章列表资源和单篇文章资源的API,支持客户端以 ...
- Effective java 总结11 - 序列化
Effective java 总结11 - 序列化 序列化:对象 -> 字节流 反序列化:字节流 -> 对象 第85条 其他方法优先于java序列化 序列化的根本问题在于:攻击面过于庞大, ...
最新文章
- tls 禁用重协商_TLS Https连接失败问题(协商失败)
- 第一个VueJs入门页面
- java shp求相交面积_shp文件自相交处理的方法
- 文件存储的原理和记事本打开文件的原理
- webService学习7:调用天气接口
- MySql 踩坑小记 1
- UIBezierPath IOS贝塞尔曲线
- Web开发编程语言是最适合新手的吗-开课吧
- Windows系统命令整理-Win10
- [Windows Server 2012] SQL Server 备份和还原方法
- 数据中心淘汰服务器,浅谈数据中心危机严重的程度
- java web服务器热部署_Tomcat服务器热部署教程_如何实现tomcat热部署
- android excel在线制作教程,Excel手机表格制作软件
- 如何烧写Bubblegum-96 board
- macOS Ventura 13.0 (22A380) 正式版发布,ISO、IPSW、PKG 下载
- [蓝桥杯单片机 八位共阳数码管](4)
- PMP 第十三章项目干系人管理
- Hololens连接mysql_学校hololens开发项目:汽车发动机检修混合现实(MR)教学
- 当AD(Altium Designer)画PCB时Ctrl+H快捷键无法选中连线时的解决办法
- tushare更新,get_k_data支持分时k线数据,可替代以前的get_hist_data