django drf django-filter的method过滤
1.View Demo
- from django.shortcuts import render
- from rest_framework.views import APIView
- from rest_framework.response import Response
- from rest_framework import status
- from rest_framework.parsers import JSONParser
- from rest_framework import mixins, generics
- from rest_framework.generics import ListAPIView
- from rest_framework.pagination import PageNumberPagination
- from goods.models import Goods, GoodsCategory
- from goods.serializer import GoodsSerializer, CategorySerializer
- from rest_framework import viewsets
- from django_filters.rest_framework import DjangoFilterBackend
- import django_filters
- from rest_framework import filters
- from django.db.models import Q
- class GoodsFilter(django_filters.rest_framework.FilterSet):
- category_id = django_filters.rest_framework.NumberFilter(method='filter_catetory_id')
- def filter_catetory_id(self, queryset, name, value):
- return queryset.filter(Q(category_id=value) | Q(category__parent_category_id=value) | Q(
- category__parent_category__parent_category_id=value))
- class Meta:
- model = Goods
- fields = ['category_id']
- class GoodsList(mixins.ListModelMixin, viewsets.GenericViewSet):
- class GoodsPagination(PageNumberPagination):
- page_size = 2
- page_size_query_param = 'pageSize'
- page_query_param = 'p'
- max_page_size = 100
- queryset = Goods.objects.all() # 不能切片后再过滤,例如:Goods.objects.all()[:10]
- serializer_class = GoodsSerializer
- pagination_class = GoodsPagination
- filter_backends = (DjangoFilterBackend, filters.SearchFilter, filters.OrderingFilter)
- search_fields = ('=name',) # 文档:https://www.django-rest-framework.org/api-guide/filtering/#searchfilter
- ordering_fields = ('name',)
- # filter_fields = ('name',) #逗号必加,缺点无法模糊查询
- filterset_class = GoodsFilter
2.SerializerDemo
- class GoodsSerializer(serializers.ModelSerializer):
- """
- Goods的serializer
- """
- # 自定义,可以获取到外键数据
- # read_only表示只用在获取数据
- category_obj = CategorySerializer(source='category',read_only=True)
- category_name = serializers.CharField(source='category.name',read_only=True)
- class Meta:
- model = Goods
- # 外键写类里的名就可以
- # fields = ('name','chick_num','category')
- fields = '__all__'
3.test
django drf django-filter的method过滤的更多相关文章
- django DRF理解
django restframework(DRF) 最近的开发过程当中,发现restframework的功能很强大,所以尝试解读了一下源码,写篇博客分享给大家,有错误的地方还请各位多多指出 视图部分 ...
- django中的filter详解
filter (数据过滤) 我们很少会一次性从数据库中取出所有的数据:通常都只针对一部分数据进行操作. 在Django API中,我们可以使用`` filter()`` 方法对数据进行过滤: > ...
- Django - Xadmin (四) Filter
Django - Xadmin (四) Filter Filter 功能描述 与 admin 组件中 Filter 功能类似,在展示页面右侧放置一列标签,通过点击这些标签来筛选出该标签相关的数据. 比 ...
- DRF(django rest-framework)
1.什么是DRF django组件,快速帮助我们开发遵循restful规范的一个组件 2.什么是restful规范 RESTful的URL用于指定资源,URL中只能使用名词的组合来标识资源," ...
- Django中通过filter和simple_tag为前端实现自定义函数
Django的模板引擎提供了一般性的功能函数,通过前端可以实现多数的代码逻辑功能,这里称之为一般性,是因为它仅支持大多数常见情况下的函数功能,例如if判断,ifequal对比返回值等,但是稍微复杂一些 ...
- 解决Django + DRF:403 FORBIDDEN:CSRF令牌丢失或不正确,{"detail":"CSRF Failed: CSRF cookie not set."}
我有一个Android客户端应用程序尝试使用Django + DRF后端进行身份验证.但是,当我尝试登录时,我收到以下响应: 403: CSRF Failed: CSRF token missing ...
- Django中利用filter与simple_tag为前端自定义函数的实现方法
转自:http://www.jb51.net/article/116303.htm 前言 Django的模板引擎提供了一般性的功能函数,通过前端可以实现多数的代码逻辑功能,这里称之为一般性,是因为它仅 ...
- DRF Django REST framework APIView(一)
什么是REST? REST是一个标准,一种规范,遵循REST风格可以使开发的接口通用,便于调用者理解接口的作用. 使url更容易理解,让增删改清晰易懂,在前后端分离开发中按照这一规范能加快开发效率,减 ...
- 轻轻松松学会 DRF Django REST framework
据我了解,目前的IT行业的大部分后端开发,都是需要进行前后端分离的,而前后端分类必不可少的是rest 规范,以下是django rest framework的学习路径: DRF Django REST ...
- Django DRF 分页
Django DRF 分页 分页在DRF当中可以一共有三种,可以通过setttings设置,也可也通过自定义设置 PageNumberPagination 使用URL http://127.0.0.1 ...
随机推荐
- linux-修改pip源
1.进入家目录的隐藏 .pip目录下 cd ~/.pip 2.创建并修改pip.conf [global]timeout = 10 # 超时 index-url = http://mirrors.a ...
- leetcode890
public class Solution { public string ConvertString(string pattern) { var dic = new Dictionary<ch ...
- JAVA 操作Excel工具类
Bean转Excel对象 /* * 文件名:BeanToExcel.java */ import java.util.ArrayList; import java.util.List; import ...
- BashProfile
[BashProfile] ~/.bash_profile. alias ll='ls -l -G -a' alias gp='grep --colour -R'
- partial function
[partial function] functools.partial(func[,*args][, **keywords]) Return a new partial object which w ...
- Android SDK Manager检查更新时遇到Failed to fetch URL xxxxxxx reason: Connection to xxxxxx的错误的解决办法!
首先说明的是这个问题并不是每个人都存在,但是我和我的一个同学都有这种情况,所以我同学百度了一下,找出了解决办法. 问题描述: 使用Android SDK Manager检查在线更新,提示以下错误: & ...
- shell如何传递变量到另一个脚本文件中
http://www.jbxue.com/article/shell/20707.html本文介绍了shell脚本传递变量到另一个脚本文件中的方法,在脚本中调用另一脚本,即创建了一个子进程,感兴趣的朋 ...
- ThinkCMF框架使用 - 如何创建应用 -1
.应用就是application目录下的一个模块,它是独立于其它模块存在的,有自己独立的运行空间: .应用采用MVC的结构: .拿Blog应用举例: Blog Controller 控制器目录(必备) ...
- Python爬虫利器六之PyQuery的用法
前言 你是否觉得 XPath 的用法多少有点晦涩难记呢? 你是否觉得 BeautifulSoup 的语法多少有些悭吝难懂呢? 你是否甚至还在苦苦研究正则表达式却因为少些了一个点而抓狂呢? 你是否已经有 ...
- Laravel 多态关联使用的案例
1.实现的功能,:短信发送,需要签名和模板审核,审核结果要插进审核记录表 2,在signature(签名表模型)和 template(模板表模型)添加多态对应关系代码其实一样,代码如下: 审核记录表需 ...