一.需求

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

    

  原有的数据格式:

二.定制化:

  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. 使用readAsDataURL方法预览图片

    使用FileReader接口的readAsDataURL方法实现图片的预览. 在FileReader出现之前,前端的图片预览是这样实现的:把本地图片上传到服务器,服务器把图片地址返回,并把它替换到图片 ...

  2. [HAOI2018]染色

    嘟嘟嘟 这题当时没想出来(因为本人实在不太擅长计数),然后又被luogu的第一篇题解吓怕了,就咕了一小段时间再写. 其实这题不是很难. 做法就是基础容斥+NTT. 首先出现\(S\)次的颜色最多有\( ...

  3. Oracle hint之ORDERED和USE_NL

    Hint:ORDERED和USE_NL ORDERED好理解,就是表示根据 from 后面表的顺序join,从左到右,左边的表做驱动表 use_nl(t1,t2):表示对表t1.t2关联时采用嵌套循环 ...

  4. 【转】dos下 和 批处理中的 for 语句的基本用法

    for 语句的基本用法 : 最复杂的for 语句,也有其基本形态,它的模样是这样的:   在cmd 窗口中:for %I in (command1) do command2 在批处理文件中:for % ...

  5. 解决git commit 大文件推送失败

    //查找大文件 git verify-pack -v .git/objects/pack/pack-*.idx | sort -k 3 -g | tail -5 //根据上面查找到的hash值,筛选文 ...

  6. 20175310 《Java程序设计》第6周学习总结

    20175310 <Java程序设计>第6周学习总结 本周博客: <20175310 类定义 - 20175310xcy - 博客园 >https://www.cnblogs. ...

  7. Android测试(三):本地单元测试

    原文:https://developer.android.com/training/testing/unit-testing/local-unit-tests.html 如果你的单元测试没有依赖或者只 ...

  8. python:利用logbook模块管理日志

    日志管理作为软件项目的通用部分,无论是开发还是自动化测试过程中,都显得尤为重要. 最初是打算利用python的logging模块来管理日志的,后来看了些github及其他人的自动化框架设计,做了个比对 ...

  9. AWS re:Invent(2019.01.09)

    时间:2019.01.09地点:北京国际饭店

  10. odoo11 审批流中行总额与申请单总额的计算问题

    一. 问题的描述 在做审批流的过程中,涉及到这样一个问题,用户申请的行总额需要根据当前行的数量和单价相乘计算得出,这本来是一个很简单的功能需求,利用odoo的计算方法就可以轻松实现,但是在在view页 ...