DRF框架中链表数据通过ModelSerializer深度查询方法汇总

一.准备测试和理解准备

创建类

class Test1(models.Model):
id = models.IntegerField(primary_key=True)
test_2_id= models.ForeignKey(to='Test2',on_delete='id') #这里有的创建失败了哈哈忘了会自动补全id class Test2(models.Model):
id = models.IntegerField(primary_key=True)
name = models.CharField(max_length=60)

生成表单数据

Test1

id test_2_id_id
1 1
2 2

Test2

id name
1 名字1
2 名字2

二.深度查询通过Test1获得Test2的name而不是id

方法一

models.py

#对于test1添加方法
class Test1(models.Model):
id = models.IntegerField(primary_key=True)
test_2_id= models.ForeignKey(to='Test2',on_delete='id')
@property
def get_test2_name(self):
return self.test_2_id.name

views.py

from rest_framework.serializers import ModelSerializer
from app.models import Test1
class Test_ser(ModelSerializer):
class Meta:
model = Test1 # 这里会把Test1面的所有名称空间存在的都进行导入
fields = ('id','get_test2_name') class Test(APIView):
def get(self,request):
test1_objs = Test1.objects.all()
test1_ser = Test_ser(instance=test1_objs,many=True).data
for a in test1_ser:
print(a)
return HttpResponse('ok')

方法二

views.py

from rest_framework.serializers import ModelSerializer
from app.models import Test1,Test2 class Test_2_ser(ModelSerializer):
class Meta:
model = Test2
fields = '__all__' class Test_ser(ModelSerializer):
test_2_id = Test_2_ser() #test_2_id为Test1与Test2关联的字段
class Meta:
model = Test1
fields = '__all__' class Test(APIView):
def get(self,request):
test1_objs = Test1.objects.all()
test1_ser = Test_ser(instance=test1_objs,many=True).data
for a in test1_ser:
print(a)
return HttpResponse('ok')

方法三

#通过添加自定义字段
class Test_ser(ModelSerializer):
test_2_name = SerializerMethodField() #自定义字段名称
def get_test_2_name(self,model): #这里方法名必须get_字段名称
return model.test_2_id.name #对于获取字段后的返回值
class Meta:
model = Test1
fields = '__all__' class Test(APIView):
def get(self,request):
test1_objs = Test1.objects.all()
test1_ser = Test_ser(instance=test1_objs,many=True).data
for a in test1_ser:
print(a)
return HttpResponse('ok')

方法四

#通过添加自定义字段
class Test_ser(ModelSerializer):
image_url=serializers.CharField(source='test_2_id.name') #test1中的test_2_id.name的内容
class Meta:
model = Test1
fields = '__all__' class Test(APIView):
def get(self,request):
test1_objs = Test1.objects.all()
test1_ser = Test_ser(instance=test1_objs,many=True,context={"request":request}).data
for a in test1_ser:
print(a)
return HttpResponse('ok')

DRF框架中链表数据通过ModelSerializer深度查询方法汇总的更多相关文章

  1. SQLyog中创建数据表及相关查询方法

    USE du; /*1.创建账务表 id name mony*/ CREATE TABLE zhangwu(id INT PRIMARY KEY AUTO_INCREMENT, sname VARCH ...

  2. django drf框架中的user验证以及JWT拓展的介绍

    登录注册是几乎所有网站都需要去做的接口,而说到登录,自然也就涉及到验证以及用户登录状态保存,最近用DRF在做的一个关于网上商城的项目中,引入了一个拓展DRF JWT,专门用于做验证和用户状态保存.这个 ...

  3. drf框架中jwt认证,以及自定义jwt认证

    0909自我总结 drf框架中jwt 一.模块的安装 官方:http://getblimp.github.io/django-rest-framework-jwt/ 他是个第三方的开源项目 安装:pi ...

  4. DRF框架中分页功能接口

    目录 DRF框架中分页功能接口 DRF框架中分页功能接口 一.在框架中提供来三个类来实现分页功能,PageNumberPagination.LimitOffsetPagination.CursorPa ...

  5. drf框架中所有视图及用法

    0909自我总结 drf框架中所有视图及用法 一.drf框架中的所有视图类 from django.views import View from rest_framework import views ...

  6. drf框架中认证与权限工作原理及设置

    0909自我总结 drf框架中认证与权限工作原理及设置 一.概述 1.认证 工作原理 返回None => 游客 返回user,auth => 登录用户 抛出异常 => 非法用户 前台 ...

  7. drf框架中分页组件

    drf框架中分页组件 普通分页(最常用) 自定制分页类 pagination.py from rest_framework.pagination import PageNumberPagination ...

  8. DRF框架中的异常处理程序

    目录 DRF框架中自定义异常处理 一.自定义异常的原因 二.如何设置处理异常的程序 DRF框架中自定义异常处理 一.自定义异常的原因 在Django和DRF框架中都封装了很多的处理异常的程序,可以处理 ...

  9. Python的Django框架中forms表单类的使用方法详解

    用户表单是Web端的一项基本功能,大而全的Django框架中自然带有现成的基础form对象,本文就Python的Django框架中forms表单类的使用方法详解. Form表单的功能 自动生成HTML ...

随机推荐

  1. 如何查看SWT源代码和帮助文档

    如何查看SWT源代码https://blog.csdn.net/wzq__janeGreen_/article/details/80068998

  2. osg::NodeVisitor

    [1]osg::Group [2]osg::PositionAttitudeTransform [2]osg::MatrixTransform [3]osg::Geode [2]osg::Matrix ...

  3. mysql通过binlog恢复删除数据

    删除误操作有时会意外出现,如果你有备份表数据的好习惯,那么至少你可以追回备份前的那些数据.如果我们打开了mysql的binlog,那么可以通过它的增量操作日志来恢复数据.怎么打开binlog前篇已有说 ...

  4. 重新认识Java 8的HashMap

    [转自]美团技术博客 HashMap是Java程序员使用频率最高的用于映射(键值对)处理的数据类型.随着JDK(Java Developmet Kit)版本的更新,JDK1.8对HashMap底层的实 ...

  5. 通用的调用WebService的两种方法。(调用别人提供的wsdl)(转)

    转载自:http://blog.sina.com.cn/s/blog_65933e020101incz.html1.调用WebService的Client端采用jax-ws调用WebService:流 ...

  6. LeetCode_136. Single Number

    136. Single Number Easy Given a non-empty array of integers, every element appears twice except for ...

  7. 基于Spark的用户分析系统

    https://blog.csdn.net/ytbigdata/article/details/47154529

  8. python之bytes和string相互转换

    来源:https://www.cnblogs.com/skiler/p/6687337.html 1.bytes主要是给计算机看的,string主要是给人看的 2.中间有个桥梁就是编码规则,现在大趋势 ...

  9. 修改centos7命令行控制台屏幕分辨率

    1) vi /etc/sysconfig/grub 2)  GRUB_CMDLINE_LINUX 在rhgb前加 vga=0x0317  (317为分辨率编码) 3) grub2-mkconfig - ...

  10. react 做的简易todolist

    首先要有一定的react的基础,里面的一些不做解释(包括项目文件的用法及作用)   ### 1. 先安装react的插件 npm  install  create-react-app  -g      ...