一.需求

  前端需要它想要的数据格式:

    

  原有的数据格式:

二.定制化:

  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图片字段序列化完整路径的更多相关文章

  1. 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 ...

  2. DRF中的序列化器

    DRF中的序列化器详细应用   视图的功能:说白了就是接收前端请求,进行数据处理 (这里的处理包括:如果前端是GET请求,则构造查询集,将结果返回,这个过程为序列化:如果前端是POST请求,假如要对数 ...

  3. IE7append新的元素自动补充完整路径

    在IE7下,进行append操作时,会把像<img />的src补成完整路径.对于上传到临时目录的图片,提交到后台要进行路径判断的情形要十分注意.

  4. js获取file控件的完整路径(上传图片预览)

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  5. dedecmsV5.7自定义图片字段调用方法

    正常情况下,在列表页(也就是 {dede:list}标签)调用附加的图片类型字段则会出现Fatal error: Call to a member function GetInnerText() on ...

  6. 【DRF框架】序列化组件

    DRF框架的序列化组件 在前后端分离的应用模式中,后端仅返回前端所需的数据,返回的数据类似是JSON,因此需要使用序列化组件进行序列化再将数据返回 使用JsonResponse做序列化 #  使用Js ...

  7. 经历了源码的痛苦,掌握DRF的核心序列化器

    目录 DRF的核心--序列化器 序列化器 什么是序列化和反序列化? 序列化 序列化demo 字段类型 字段参数 序列化自定制返回字段 方法一:在序列化类(serializers.py)中写 方法二:在 ...

  8. 字符型图片验证码识别完整过程及Python实现

    字符型图片验证码识别完整过程及Python实现 1   摘要 验证码是目前互联网上非常常见也是非常重要的一个事物,充当着很多系统的 防火墙 功能,但是随时OCR技术的发展,验证码暴露出来的安全问题也越 ...

  9. dedecms 文章页图片改为绝对路径

    这几天在网站改版,想把网站做大,想做频道页二级域名,于是在做网站的过程中发现一个问题,dedecms开设二级域名后,在二级域名的文章页无法显示图片,查看源代码后发现问题,由于dedecms文章页中的图 ...

随机推荐

  1. 机器学习算法总结(三)——集成学习(Adaboost、RandomForest)

    1.集成学习概述 集成学习算法可以说是现在最火爆的机器学习算法,参加过Kaggle比赛的同学应该都领略过集成算法的强大.集成算法本身不是一个单独的机器学习算法,而是通过将基于其他的机器学习算法构建多个 ...

  2. 网站建设部署与发布--笔记3-部署Nginx

    部署Nginx 操作系统CentOS 7.2 1.安装epel库 $ yum install epel-release -y 2.安装nginx $ yum -y install nginx 3.启动 ...

  3. app前端代码打包步骤

    一.搭建项目环境 1.安装node.js 在网上找到nodejs压缩包,下载解压后安装node-v8.9.3-x64.msi文件. 安装完毕后,在windows的cmd控制台输入node -v或nod ...

  4. Python(x,y) 的 FTP 下载地址

    因为 Python(x,y) 软件包托管在 Google code 上 https://code.google.com/p/pythonxy/,所以国内比较难下载. 这里推荐一个 FTP 下载地址:f ...

  5. 无线智联-程序篇:让python与matlab牵手

    python和matlab本来是青梅竹马的好基友,奈何相爱相杀,经常放在一起做对比,就好比经常听到的,“你看看隔壁xx家的孩子”,其实每个孩子都有每个孩子的优点,如果能发挥每个孩子的优点,岂不是更好. ...

  6. CRectTracker类的使用

    CRectTracker(俗称“橡皮筋”类)是一个非常有意思的类.你在Windows中经常看到这样的情况:它可以用做显示边界,你也可以扽它的八个角用来放大缩小,或做框选使用.如何通过编程来实现这种功能 ...

  7. I2C地址问题

    #define     MAX_17040_BATTERY_I2C_ADDR        (0x36) 设备地址 #define     MAX_17040_BATTERY_WRITE_ADDR   ...

  8. VC++全屏

    Win32类型的全屏代码: 1. 去掉menu ATOM MyRegisterClass(HINSTANCE hInstance) { WNDCLASSEX wcex; wcex.cbSize = s ...

  9. Python网络爬虫实战:根据天猫胸罩销售数据分析中国女性胸部大小分布

    本文实现一个非常有趣的项目,这个项目是关于胸罩销售数据分析的.是网络爬虫和数据分析的综合应用项目.本项目会从天猫抓取胸罩销售数据,并将这些数据保存到SQLite数据库中,然后对数据进行清洗,最后通过S ...

  10. 作为一个.NET开发者,怎么看待和选择层出不穷的新技术,新架构?

    经常在一些技术社区看到这些的问题,一个.NET开发者去求职,看到应聘的公司的技术栈还是比较老的ASP.NET WEBFORM的时候,希望了解未来会否使用ASP.NET MVC的时候,没有获得肯定答复, ...