django-rest-framework第一次使用使用常见问题

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

记录在第一次使用django-rest-framework框架使用时遇到的问题,为了便于理解在这里创建了Person和Grade这两个model

from django.db import models
class Person(models.Model):SHIRT_SIZES = (('S', 'Small'),('M', 'Medium'),('L', 'Large'),)name = models.CharField(max_length=60)shirt_size = models.CharField(max_length=1, choices=SHIRT_SIZES)class Grade(models.Model):score=models.CharField(max_length=60)person = models.ForeignKey(Person, on_delete=models.CASCADE)

接口返回下拉选项对应的值

在Person这个model中的shirt_size字段 存储到数据库中的值未S/M/L,但是在前端用户需要看到他们对应value,那么我们接口如何返回呢

需要在模块对应的serializer.py文件中小小的修改一下


class PersonSerializer(serializers.ModelSerializer):shirt_size_name = serializers.CharField(source='get_shirt_size_display', required=False)class Meta:model = Personfields = ('id','shirt_size', 'shirt_size_name')

接口返回外键对应的值

在Grade查询接口中返回对应外键人员的姓名,这有两种方法

  1. Grade在序列化的时候,就创建一个新的字段叫 person_name,指定为 serializers.CharField,而且字段使用 source 这个属性,具体而言格式为 CharField(source='<本model中的外键>.<外键指向的model的相应属性>')
```
class GradeSerializer(serializers.ModelSerializer):person_name = serializers.CharField(source='person.name'')class Meta:model = Gradefields = ('id','person_name')
```
  1. 在 models 里面 @property 装饰符先创建一个 person_name 函数,这个函数返回的是外键对应 model 的相应字段,比如 person.name。 然后,序列化的时候,指定为 serializers.ReadOnlyField() 类型

这种方法也可以增加给接口增加额外的字段

```
class Grade(models.Model):score=models.CharField(max_length=60)person = models.ForeignKey(Person, on_delete=models.CASCADE)......@propertydef person_name(self):return self.person.name``````
class GradeSerializer(serializers.ModelSerializer):person_name = serializers.ReadOnlyField()class Meta:model = Gradefields = ('id','person_name')
```

模糊查询

首先增加一个过滤器filters.py

		class   PersonFilter(django_filters.rest_framework.FilterSet):"""人员的过滤类"""name = django_filters.CharFilter(name='name', lookup_expr='icontains')class Meta:model = Personfields = ('id', 'name')

有时自带的过滤方法无法满足,就需要我们自定义过滤方法,例:

class   PersonFilter(django_filters.rest_framework.FilterSet):# 自定义了过滤方法person_filterperson_name = django_filters.CharFilter(method='person_filter')# 通过传入的中文名模糊查询到对应90分数人的IDdef person_filter(self, queryset, name, value):personList = []qs = Grade.objects.filter(name__contains=value).filter(score='90')if qs.exists():for q in qs:personList.append(q.id)# 返回对应人员的查询集合return queryset.filter(id__in=userList)

然后在对应的view中配置一下ViewSet

class PersonViewSet(viewsets.ModelViewSet):"""LIST用户列表页, 分页, 搜索, 过滤, 排序""".......filter_backends = (DjangoFilterBackend, SearchFilter, OrderingFilter)filter_class = PersonFiltersearch_fields = ('id', 'name')......

转载于:https://my.oschina.net/hellotest/blog/1942564

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/389777.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

插入脚注把脚注标注删掉_地狱司机不应该只是英国电影历史数据中的脚注,这说明了为什么...

插入脚注把脚注标注删掉Cowritten by Andie Yam由安迪(Andie Yam)撰写 Hell Drivers”, 1957地狱司机 》电影海报 Data visualization is a great way to celebrate our favorite pieces of art as well as reveal connections and ideas that were previously invisible. Mor…

贝叶斯统计 传统统计_统计贝叶斯如何补充常客

贝叶斯统计 传统统计For many years, academics have been using so-called frequentist statistics to evaluate whether experimental manipulations have significant effects.多年以来&#xff0c;学者们一直在使用所谓的常客统计学来评估实验操作是否具有significant效果。…

saltstack二

配置管理 haproxy的安装部署 haproxy各版本安装包下载路径https://www.haproxy.org/download/1.6/src/&#xff0c;跳转地址为http&#xff0c;改为https即可 创建相关目录 # 创建配置目录 [rootlinux-node1 ~]# mkdir /srv/salt/prod/pkg/ [rootlinux-node1 ~]# mkdir /srv/sa…

319. 灯泡开关

319. 灯泡开关 初始时有 n 个灯泡处于关闭状态。第一轮&#xff0c;你将会打开所有灯泡。接下来的第二轮&#xff0c;你将会每两个灯泡关闭一个。 第三轮&#xff0c;你每三个灯泡就切换一个灯泡的开关&#xff08;即&#xff0c;打开变关闭&#xff0c;关闭变打开&#xff0…

因为你的电脑安装了即点即用_即你所爱

因为你的电脑安装了即点即用Data visualization is a great way to celebrate our favorite pieces of art as well as reveal connections and ideas that were previously invisible. More importantly, it’s a fun way to connect things we love — visualizing data and …

2074. 反转偶数长度组的节点

2074. 反转偶数长度组的节点 给你一个链表的头节点 head 。 链表中的节点 按顺序 划分成若干 非空 组&#xff0c;这些非空组的长度构成一个自然数序列&#xff08;1, 2, 3, 4, …&#xff09;。一个组的 长度 就是组中分配到的节点数目。换句话说&#xff1a; 节点 1 分配给…

团队管理新思考_需要一个新的空间来思考讨论和行动

团队管理新思考andrew wong安德鲁黄 Follow跟随 Sep 4 九月4 There is a need for a new space to think, discuss, and act. This need are being felt by the majority of AI / ML / Data Product Managers out there. They are exhausted by the ever increasing data volum…

2075. 解码斜向换位密码

2075. 解码斜向换位密码 字符串 originalText 使用 斜向换位密码 &#xff0c;经由 行数固定 为 rows 的矩阵辅助&#xff0c;加密得到一个字符串 encodedText 。 originalText 先按从左上到右下的方式放置到矩阵中。 先填充蓝色单元格&#xff0c;接着是红色单元格&#xff…

微服务实战(六):落地微服务架构到直销系统(事件存储)

在CQRS架构中&#xff0c;一个比较重要的内容就是当命令处理器从命令队列中接收到相关的命令数据后&#xff0c;通过调用领域对象逻辑&#xff0c;然后将当前事件的对象数据持久化到事件存储中。主要的用途是能够快速持久化对象此次的状态&#xff0c;另外也可以通过未来最终一…

时间序列数据的多元回归_清理和理解多元时间序列数据

时间序列数据的多元回归No matter what kind of data science project one is assigned to, making sense of the dataset and cleaning it always critical for success. The first step is to understand the data using exploratory data analysis (EDA)as it helps us crea…

vue-cli搭建项目的目录结构及说明

vue-cli基于webpack搭建项目的目录结构 build文件夹 ├── build // 项目构建的(webpack)相关代码 │ ├── build.js // 生产环境构建代码&#xff08;在npm run build的时候会用到这个文件夹&#xff09;│ ├── check-versions.js // 检查node&am…

391. 完美矩形

391. 完美矩形 给你一个数组 rectangles &#xff0c;其中 rectangles[i] [xi, yi, ai, bi] 表示一个坐标轴平行的矩形。这个矩形的左下顶点是 (xi, yi) &#xff0c;右上顶点是 (ai, bi) 。 如果所有矩形一起精确覆盖了某个矩形区域&#xff0c;则返回 true &#xff1b;否…

bigquery 教程_bigquery挑战实验室教程从数据中获取见解

bigquery 教程This medium article focusses on the detailed walkthrough of the steps I took to solve the challenge lab of the Insights from Data with BigQuery Skill Badge on the Google Cloud Platform (Qwiklabs). I got access to this lab in the Google Cloud R…

学习linux系统到底有没捷径?

2019独角兽企业重金招聘Python工程师标准>>> 说起linux操作系&#xff0c;可能对于很多不了解的人来说&#xff0c;第一个想到的就是类似于黑客帝国中的黑框框以及一串串不知所云的代码&#xff0c;总之这些感觉都可以总结成为一个字&#xff0c;那就是——酷&#…

wxpython实现界面跳转

wxPython实现Frame之间的跳转/更新的一种方法 wxPython是Python中重要的GUI框架&#xff0c;下面通过自己的方法实现模拟类似PC版微信登录&#xff0c;并跳转到主界面&#xff08;朋友圈&#xff09;的流程。 &#xff08;一&#xff09;项目目录 【说明】 icon : 保存项目使用…

java职业技能了解精通_如何通过精通数字分析来提升职业生涯的发展,第8部分...

java职业技能了解精通Continuing from the seventh article in this series, we are going to explore ways to present data. Over the past few years, Marketing and SEO field has become more data-driven than in the past thanks to tools like Google Webmaster Tools …

kfc流程管理炸薯条几秒_炸薯条成为数据科学的最后前沿

kfc流程管理炸薯条几秒In February, our Data Science team had an argument about which restaurant we went to made the best French Fry.2月&#xff0c;我们的数据科学团队对我们去哪家餐厅做得最好的炸薯条产生了争议。 We decided to make it a competition throughout…

bigquery_到Google bigquery的sql查询模板,它将您的报告提升到另一个层次

bigqueryIn this post, we’re sharing report templates that you can build with SQL queries to Google BigQuery data.在本文中&#xff0c;我们将分享您可以使用SQL查询为Google BigQuery数据构建的报告模板。 First, you’ll find out about what you can calculate wit…

分类树/装袋法/随机森林算法的R语言实现

原文首发于简书于[2018.06.12] 本文是我自己动手用R语言写的实现分类树的代码&#xff0c;以及在此基础上写的袋装法&#xff08;bagging&#xff09;和随机森林&#xff08;random forest&#xff09;的算法实现。全文的结构是&#xff1a; 分类树 基本知识predginisplitrules…

数据科学学习心得_学习数据科学时如何保持动力

数据科学学习心得When trying to learn anything all by yourself, it is easy to lose motivation and get thrown off track.尝试自己学习所有东西时&#xff0c;很容易失去动力并偏离轨道。 In this article, I will provide you with some tips that I used to stay focus…