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. VUE知识点小记

    .if里面不能用import方式导入,只能用require方式引入 判断长度大于0 getIssues (vue, data) { let label = '' ) { label = `+label ...

  2. Android Studio 3.5新特性

    Android Studio 3.5新特性     原文链接:https://blog.csdn.net/jklwan/article/details/99974869 Android Studio ...

  3. Angular 中的 dom 操作(ViewChild)以及父子组件中通过 ViewChild 调用子组件的方法

    <app-header #header></app-header> <div #myBox> 我是一个dom节点 </div> <button ( ...

  4. 浅谈Mysql共享锁、排他锁、悲观锁、乐观锁及其使用场景

    浅谈Mysql共享锁.排他锁.悲观锁.乐观锁及其使用场景   Mysql共享锁.排他锁.悲观锁.乐观锁及其使用场景 一.相关名词 |--表级锁(锁定整个表) |--页级锁(锁定一页) |--行级锁(锁 ...

  5. 【PHP】解决数据库查询出来的中文内容显示为问号“??”

    方法一:在数据库连接后执行: mysql_query('SET NAMES utf8'); 代码: $dbconn=mysql_connect("localhost", " ...

  6. 【422】Insert often-used pieces of text in gedit

    Ref: Snippets Enable Snippets Plugin Browse Snippets Using Snippets To insert a nippet into your cur ...

  7. 35个高级Python知识点总结

    原文地址:https://blog.51cto.com/xvjunjie/2156525 No.1 一切皆对象 众所周知,Java中强调“一切皆对象”,但是Python中的面向对象比Java更加彻底, ...

  8. 慕课零基础学java语言翁恺老师——第一周编程题

    温度转换(5分) 题目内容: 写一个将华氏温度转换成摄氏温度的程序,转换的公式是: °F = (9/5)*°C + 32 其中C表示摄氏温度,F表示华氏温度. 程序的输入是一个整数,表示华氏温度.输出 ...

  9. 【实验】ssh私钥泄露

    翻自己的笔记看到之前做过的一个实验,一个关于ssh私钥泄露的实验,贴出来与大家交流. 做这种题脑洞需要特别大,而且也需要运气. 1.实验环境准备 2.实验流程 1)探测信息 用namp进行端口扫描,扫 ...

  10. Ie浏览器请求400错误,谷歌火狐等浏览器正常请求.

    做项目的时候,遇到一个小的问题.一个location.href="请求的url"在其它浏览器上是可以正常请求的.但是在ie浏览器上确出现奇怪的http请求400错误,我们先来对于h ...