drf图片字段序列化完整路径
一.需求
前端需要它想要的数据格式:

原有的数据格式:

二.定制化:
1.可以嵌套序列化pol_type,lit_des,area_detail,但结构如下:
class ChrDetailSerializer(serializers.ModelSerializer):
"""
年代地层详情序列化
""" class Meta:
model = Address_Lis
fields = ('region',) class LisDetailSerializer(serializers.ModelSerializer):
"""
岩石地层序列化
"""
parent_categry = ChrDetailSerializer() class Meta:
model = Address_Lis
fields = ('region', 'parent_categry') class PolarizedTypeSeriliazer(serializers.ModelSerializer):
"""
偏光类型序列化
""" class Meta:
model = PolarizedType
fields = ('pol_type',) class LithologicalSeriliazer(serializers.ModelSerializer):
"""
岩性序列化
""" class Meta:
model = Lithological
fields = ('lit_des',) class RockDetailSerializer(serializers.ModelSerializer):
"""
详情序列化
"""
pol_type = PolarizedTypeSeriliazer()
lit_des = LithologicalSeriliazer()
area_detail = LisDetailSerializer() class Meta:
model = Rock
fields = '__all__'
于是前端就不高兴了,不行这样的格式,前端说写起来有点麻烦,于是乎改呗。

2. 想了下,利用serializer.SerializerMethodField()好像还挺容易解决的:
好像是解决了,一看我去,完了,这个图片的字段不是完整的url啊,一想,我不可能把域名放在setting中,然后拼接吧,就太low了。
class RockDetailSerializer(serializers.ModelSerializer):
"""
详情序列化
""" detail = serializers.SerializerMethodField(read_only=True)
area_detail = serializers.SerializerMethodField(read_only=True)
pol_type = serializers.SerializerMethodField(read_only=True)
lit_des = serializers.SerializerMethodField(read_only=True)
well_name = serializers.SerializerMethodField(read_only=True) class Meta:
model = Rock
fields = ('detail', 'area_detail', 'pol_type', 'lit_des', 'depth', 'well_name') def get_detail(self, obj):
try:
return {'id': obj.id, 'image': obj.image.url, 'lit_com': obj.lit_com, 'multiple': obj.multiple,
'color': obj.color, 'pal_fea': obj.pal_fea, 'lit_fea': obj.lit_fea, 'por_fea': obj.por_fea}
except:
return None def get_area_detail(self, obj):
try:
add_obj = obj.area_detail
return str(add_obj.parent_categry.region) + '-' + str(add_obj.region)
except:
return None def get_pol_type(self, obj):
try:
return obj.pol_type.pol_type
except:
return None def get_lit_des(self, obj):
try:
return obj.lit_des.lit_des
except:
return None def get_well_name(self, obj):
try:
return obj.area_detail.parent_categry.parent_categry.region
except:
return None

3.心想,可以在写一个序列化啊,于是又开干了:
class RockBasicSerializer(serializers.ModelSerializer):
class Meta:
model = Rock
fields = ('id', 'image', 'lit_com', 'multiple', 'color', 'pal_fea', 'lit_fea', 'por_fea') class RockDetailSerializer(serializers.ModelSerializer):
"""
详情序列化
""" detail = serializers.SerializerMethodField(read_only=True)
area_detail = serializers.SerializerMethodField(read_only=True)
pol_type = serializers.SerializerMethodField(read_only=True)
lit_des = serializers.SerializerMethodField(read_only=True)
well_name = serializers.SerializerMethodField(read_only=True) class Meta:
model = Rock
fields = ('detail', 'area_detail', 'pol_type', 'lit_des', 'depth', 'well_name') def get_detail(self, obj):
try:
rock_obj = RockBasicSerializer(obj, many=False, context={'request': self.context['request']}).data
return rock_obj
except:
return None def get_area_detail(self, obj):
try:
add_obj = obj.area_detail
return str(add_obj.parent_categry.region) + '-' + str(add_obj.region)
except:
return None def get_pol_type(self, obj):
try:
return obj.pol_type.pol_type
except:
return None def get_lit_des(self, obj):
try:
return obj.lit_des.lit_des
except:
return None def get_well_name(self, obj):
try:
return obj.area_detail.parent_categry.parent_categry.region
except:
return None

哎哎哎,较好的解决了,夸自己一下。
drf图片字段序列化完整路径的更多相关文章
- day71:drf:API接口&Restful API规范&Django Rest Framework&drf中的序列化和反序列化功能
目录 1.web应用模式 2.API接口 3.Restful API规范 4.序列化 5.Django Rest Framework 1.drf的简单介绍 2.drf的特点 3.如何安装drf 4.d ...
- DRF中的序列化器
DRF中的序列化器详细应用 视图的功能:说白了就是接收前端请求,进行数据处理 (这里的处理包括:如果前端是GET请求,则构造查询集,将结果返回,这个过程为序列化:如果前端是POST请求,假如要对数 ...
- IE7append新的元素自动补充完整路径
在IE7下,进行append操作时,会把像<img />的src补成完整路径.对于上传到临时目录的图片,提交到后台要进行路径判断的情形要十分注意.
- js获取file控件的完整路径(上传图片预览)
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...
- dedecmsV5.7自定义图片字段调用方法
正常情况下,在列表页(也就是 {dede:list}标签)调用附加的图片类型字段则会出现Fatal error: Call to a member function GetInnerText() on ...
- 【DRF框架】序列化组件
DRF框架的序列化组件 在前后端分离的应用模式中,后端仅返回前端所需的数据,返回的数据类似是JSON,因此需要使用序列化组件进行序列化再将数据返回 使用JsonResponse做序列化 # 使用Js ...
- 经历了源码的痛苦,掌握DRF的核心序列化器
目录 DRF的核心--序列化器 序列化器 什么是序列化和反序列化? 序列化 序列化demo 字段类型 字段参数 序列化自定制返回字段 方法一:在序列化类(serializers.py)中写 方法二:在 ...
- 字符型图片验证码识别完整过程及Python实现
字符型图片验证码识别完整过程及Python实现 1 摘要 验证码是目前互联网上非常常见也是非常重要的一个事物,充当着很多系统的 防火墙 功能,但是随时OCR技术的发展,验证码暴露出来的安全问题也越 ...
- dedecms 文章页图片改为绝对路径
这几天在网站改版,想把网站做大,想做频道页二级域名,于是在做网站的过程中发现一个问题,dedecms开设二级域名后,在二级域名的文章页无法显示图片,查看源代码后发现问题,由于dedecms文章页中的图 ...
随机推荐
- 总结 Linux 下安装 PHP 扩展步骤
总结一下 Linux 下安装 PHP 扩展步骤,这里以安装 PHP 的 redis 扩展为例. 一.拿到扩展包下载地址,下载扩展包 pecl 上搜索 redis wget http://pecl.ph ...
- Python 的几个命令行参数
1) 以 $ python 方式启动 python 解释器,之后 import 一个模块,将生成 .pyc 文件. 2) 以 $ python -O 方式启动 python 解释器,之后 import ...
- Python脱产8期 Day04 2019/4/16
流程控制 1.宏观一定是自上而下(逻辑上方代码一定比逻辑下方代码先执行):顺序结构2.遇到需要条件判断选择不同执行路线的执行方式:分支结构3.有些事情需要重复不断的去执行(当满足某种条件或不满足某种条 ...
- C语言之建立线性表
#include<stdio.h> #include<stdlib.h> #define MaxSize 60 #define ElemType int typedef str ...
- face detection[PyramidBox]
本文来自<PyramidBox: A Context-assisted Single Shot Face Detector>,是来自百度的作品,时间线为2018年8月. 0 引言 最近基于 ...
- Spark访问与HBase关联的Hive表
知识点1:创建关联Hbase的Hive表 知识点2:Spark访问Hive 知识点3:Spark访问与Hbase关联的Hive表 知识点1:创建关联Hbase的Hive表 两种方式创建,内部表和外部表 ...
- HBase篇(3)-架构详解
[每日五分钟搞定大数据]系列,HBase第三篇 聊完场景和数据模型我们来说下HBase的架构,在网上找了张比较清晰的图,我觉得这张图能说明很多问题,那这一篇我们就重点来解析下这张图 角色与职责 先介绍 ...
- 苹果 icloud 把我 ipad min 所有照片丢失
苹果 icloud 把我 ipad min 所有照片丢失,大概发生在 '云上贵州' 之后! 发帖纪念--- 求个说法---
- Mysql权限操作、用户管理、密码操作
Mysql的权限 mysql中存在4个控制权限的表,分别为user表,db表,tables_priv表,columns_priv表. mysql权限表的验证过程为: 先从user表中的Host,Use ...
- NYOJ-16-矩形嵌套 记忆化搜索
#include<iostream> #include<stdio.h> #include<string.h> #include<algorithm> ...