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文章页中的图 ...
随机推荐
- P1638 逛画展(直尺法)
这道题是直尺法的模板题: #include<iostream> using namespace std; ; ; int n, m, a[maxn], vis[M]; int main() ...
- C# WebApi 获取客户端ip地址
转自:http://www.cnblogs.com/weixing/p/5674078.html References required: HttpContextWrapper - System.We ...
- linux 应用和发展
课程大纲 UNIX/Linux发展历史 自由软件 Linux应用领域 Linux学习方法 UNIX 发展历史 (1 )1965年,美国麻省理工学院(MIT). 通用电气公司(G ...
- Sphinx 生成 Windows 帮助文件 (.chm文件)
本文不介绍 Sphinx 的用法,只简要罗列 Windows 下生成 .chm 文件的步骤. 0. 首先检查机器是否安装了 HTML Help Workshop 软件,一般安装路径应该是 C:\Pro ...
- CentOS7时间设置问题
本地安装一个VMWare player虚拟机客户端,并安装了Linux CentOS7 Basic Web Server系统,时区在安装时已经选择了Asia/Shanghai,但是安装完成后,时间和当 ...
- 一道很有意思的java线程题
这几天看结城浩的<java多线程设计模式>,跟着做一些习题,有几道题目很有意思,记录下自己的体会. 首先是题目(在原书212页,书尾有解答): public class Main { pu ...
- 长期招收linux驱动工程师
公司:宝存科技 工作内容: 1.负责企业级ssd的feature设计和开发工作 2.负责ftl算法的设计及开发 3.排查客户问题 任职要求: 1.精通C语言 2.熟练掌握linux操作系统使用 3.熟 ...
- EntityFramework Core并发导致显式插入主键问题
前言 之前讨论过EntityFramework Core中并发问题,按照官网所给并发冲突解决方案以为没有什么问题,但是在做单元测试时发现too young,too simple,下面我们一起来看看. ...
- 线程GIL锁 线程队列 回调函数
----------------------------------无法改变风向,可以调整风帆;无法左右天气,可以调整心情.如果事情无法改变,那就去改变观念. # # ---------------- ...
- 搜狐畅游一面(c++)
上来是个小姐姐,有点懵.. 1. 介绍 2. 项目 3. 实习 4. 用的协议 tcp和udp的协议 5. select 和epoll(忘了) 6. 数据库的隔离级别, 死锁, 怎么避免死锁 ...