** 我的应用需求:**
** 查询效果是: 如mysql : select union select where order by 这个效果,
查询多个表的数据,并拼合在一起,自定义过滤条件,自定义排序方式,问题是基于django rest framework 怎么来实现这功能.
请回复 示范 代码,多谢! **
# 下面是尝试写的, 但排序出现问题------------------------------------------------------------------------------------------------
from drf_multiple_model.views import ObjectMultipleModelAPIView
from drf_multiple_model.views import FlatMultipleModelAPIView
from api.pager import LimitPagination
from rest_framework import filters
from django.http import request
from rest_framework.pagination import PageNumberPagination
from drf_multiple_model.pagination import MultipleModelLimitOffsetPagination
from pro_test.myoffice import models
class LimitPagination(MultipleModelLimitOffsetPagination): #limit分页器
default_limit = 2
class SearchGroup(FlatMultipleModelAPIView):
# authentication_classes=[] #取消全局用户认证
# permission_classes=[] #取消全局权限验证
# throttle_classes=[]
def initial(self,request,*args, **kwargs):
super(SearchGroup,self).initial(request,*args, **kwargs)
# 代码执行到这里时,说明请求已经收到,才可以从url获取数据
#从url中提取参数
project_name = request.query_params.get("project_name")
orderdate_gte = request.query_params.get("orderdate_gte")
orderdate_ite = request.query_params.get("orderdate_ite")
sample_name = request.query_params.get('sample_name')
if not orderdate_gte:
orderdate_gte ='0001-01-01'
if not orderdate_ite:
orderdate_ite='2050-01-01'
if not project_name:
project_name=''
if not sample_name:
sample_name=''
# 修改API视图的querylist属性,注意每次请求只可以self的,不要修改类,否则引发bug
self.querylist=[
{'queryset':models.Rebar.objects.filter(project_name__contains=project_name,sample_name__contains=sample_name,order_date__range=[orderdate_gte,orderdate_ite]),
'serializer_class': SearchGroupRebarSerializer,
},
{'queryset':models.ConcreteCube.objects.filter(project_name__contains=project_name,sample_name__contains=sample_name,order_date__range=[orderdate_gte,orderdate_ite]),
'serializer_class': SearchGroupConcreteCubeSerializer,
},
]
pagination_class=LimitPagination # 这个类分页只能用limit,不能用其它
"""
上面代码的问题描述:
分页器 LimitPagination: (在上面写了代码)
当这个分页器设置 default_limit = 2 时,每页返回的是4行数据,每个objects.filter() 各2行数据 (这个问题倒是不大,问题是排序的问题),
最大的问题是,返回的数据: 2行第一个objects.filter() 的数据, 再2行另一个objects.filter() 的数据,交替呈现 ,这肯定是不行的
现在我要把的2个或多个 objects.filter() 返回的所有数据,统一按ID序号排序返回,或按日期排序返回,这才方便浏览,交替呈现不行,
我的应用需求:
查询效果是: 如mysql : select.... union select .... where .... order by ... 这个效果,
查询多个表的数据,并拼合在一起,自定义过滤条件,自定义排序方式,问题是基于django rest framework 怎么来实现这功能.
你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,技术专家团超时未为您做出解答
本次提问扣除的有问必答次数,已经为您补发到账户,我们后续会持续优化,扩大我们的服务范围,为您带来更好地服务。