DRF框架中链表数据通过ModelSerializer深度查询方法汇总
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深度查询方法汇总的更多相关文章
- SQLyog中创建数据表及相关查询方法
USE du; /*1.创建账务表 id name mony*/ CREATE TABLE zhangwu(id INT PRIMARY KEY AUTO_INCREMENT, sname VARCH ...
- django drf框架中的user验证以及JWT拓展的介绍
登录注册是几乎所有网站都需要去做的接口,而说到登录,自然也就涉及到验证以及用户登录状态保存,最近用DRF在做的一个关于网上商城的项目中,引入了一个拓展DRF JWT,专门用于做验证和用户状态保存.这个 ...
- drf框架中jwt认证,以及自定义jwt认证
0909自我总结 drf框架中jwt 一.模块的安装 官方:http://getblimp.github.io/django-rest-framework-jwt/ 他是个第三方的开源项目 安装:pi ...
- DRF框架中分页功能接口
目录 DRF框架中分页功能接口 DRF框架中分页功能接口 一.在框架中提供来三个类来实现分页功能,PageNumberPagination.LimitOffsetPagination.CursorPa ...
- drf框架中所有视图及用法
0909自我总结 drf框架中所有视图及用法 一.drf框架中的所有视图类 from django.views import View from rest_framework import views ...
- drf框架中认证与权限工作原理及设置
0909自我总结 drf框架中认证与权限工作原理及设置 一.概述 1.认证 工作原理 返回None => 游客 返回user,auth => 登录用户 抛出异常 => 非法用户 前台 ...
- drf框架中分页组件
drf框架中分页组件 普通分页(最常用) 自定制分页类 pagination.py from rest_framework.pagination import PageNumberPagination ...
- DRF框架中的异常处理程序
目录 DRF框架中自定义异常处理 一.自定义异常的原因 二.如何设置处理异常的程序 DRF框架中自定义异常处理 一.自定义异常的原因 在Django和DRF框架中都封装了很多的处理异常的程序,可以处理 ...
- Python的Django框架中forms表单类的使用方法详解
用户表单是Web端的一项基本功能,大而全的Django框架中自然带有现成的基础form对象,本文就Python的Django框架中forms表单类的使用方法详解. Form表单的功能 自动生成HTML ...
随机推荐
- ubuntu16上启用外部管理端口
docker启动外部访问端口在Ubuntu上: [root@maintance systemd] $cd /lib/systemd/system/ [root@maintance system] $c ...
- PaddlePaddle实现线性回归
在本次实验中我们将使用PaddlePaddle来搭建一个简单的线性回归模型,并利用这一模型预测你的储蓄(在某地区)可以购买多大面积的房子.并且在学习模型搭建的过程中,了解到机器学习的若干重要概念,掌握 ...
- Intellij-编译
目录 IntelliJ IDEA 编译方式介绍 编译方式介绍 编译触发按钮 运行之前的编译 @(目录) IntelliJ IDEA 编译方式介绍 编译方式介绍 相比较于 Eclipse 的实时自动编译 ...
- 实例解析Python设计模式编程之桥接模式的运用
实例解析Python设计模式编程之桥接模式的运用 这篇文章主要介绍了Python设计模式编程之桥接模式的运用,桥接模式主张把抽象部分与它的实现部分分离,需要的朋友可以参考下 我们先来看一个例子: #e ...
- VCL组件之TPanel
TPanel位于Standard组件面板上,也是常用的一种容器控件.面板的一个优点就是放在面板上的组件称为面板的一部分,因此它们与面板一起移动.这在设计阶段很有用. Panel组件的大部分功能在于其A ...
- 关于类似QQ的展开和折叠效果的实现
介绍: 1.两级折叠与展开: 实现原理如下: 1>通过表视图的组的头视图和单元格实现; 2>通过改变cell的高度实现; 3>通过cell实现; 实现 UITableView 的ce ...
- gunicorn的log如何传递给django,由django管理
gunicorn配置文件为gunicorn_config.py里面有日志的配置 # errorlog = '/home/admin/output/erebus/logs/gunicorn_error. ...
- Azure Web应用相关设置
这里用来记录自己在工作中,在Azure Web应用中用到的配置 设置NodeJS版本 Azure Web应用默认的NodeJS版本是0.10.4,这个版本太低,不能满足实际的需要 参照下图修改,根据自 ...
- kafka连接报错kafka.errors.NoBrokersAvailable: NoBrokersAvailable
问题: 本地windows系统远程连接kafka报错,kafka.errors.NoBrokersAvailable: NoBrokersAvailable. 解决: 在网上看到说是hosts文件需要 ...
- 处理人际关系的5大原则zz
人际关系题是结构化面试当中重要的题型之一,人们常用两个“70%”来形容人际关系的重要性: 人际关系题主要考察考生不同人际关系间的适应性.人际合作的主动性.处理人际关系的原则性和灵活性以及对组织中权属关 ...