问题描述
例如
{
"count": 1234,"next": "http://mydomain/?page=2","prevIoUs": null,"isSuccess" : 'Success' # <---- this one
"results": [
{
'id':123,'name':'abc'
},{
'id':234,'name':'efg'
},...
]
}
我找到了 this way 但它没有用。 如何在 Django 分页返回时添加新值?
这是我的尝试:
class Testing(generics.GenericAPIView):
queryset = Problem.objects.all()
serializer_class = userSerializer
pagination_class = userPagination
def get(self,request):
queryset = self.get_queryset()
page = self.request.query_params.get('page')
if page is not None:
paginate_queryset = self.paginate_queryset(queryset)
serializer = self.serializer_class(paginate_queryset,many=True)
tmp = serializer.data
tmp['isSuccess'] = 'Success'
return self.get_paginated_response(tmp)
解决方法
试试这个,不要将 isSuccess
添加到 serializer.data 中,而是将其添加到 get_paginated_response().data
def get(self,request):
queryset = self.get_queryset()
page = self.request.query_params.get('page')
if page is not None:
paginate_queryset = self.paginate_queryset(queryset)
serializer = self.serializer_class(paginate_queryset,many=True)
tmp = serializer.data
# tmp['isSuccess'] = 'Success'
response = self.get_paginated_response(tmp)
response.data['isSuccess'] = "Success"
return Response(data=response.data,status=status.HTTP_200_OK)
return Response(data="No Page parameter found",status=status.HTTP_200_OK)
响应将类似于
{
"count": 1234,"next": null,"previous": null,"results": [
{
'id':123,'name':'abc'
},...
],"isSuccess" : 'Success'
}
,
您可以尝试覆盖 PageNumberPagination
中的#[cfg(any(target_os = "macos",target_os = "ios"))]
mod imp {
use super::Args;
use crate::ffi::CStr;
pub unsafe fn init(_argc: isize,_argv: *const *const u8) {}
pub fn cleanup() {}
#[cfg(target_os = "macos")]
pub fn args() -> Args {
use crate::os::unix::prelude::*;
extern "C" {
// These functions are in crt_externs.h.
fn _NSGetArgc() -> *mut libc::c_int;
fn _NSGetArgv() -> *mut *mut *mut libc::c_char;
}
let vec = unsafe {
let (argc,argv) =
(*_NSGetArgc() as isize,*_NSGetArgv() as *const *const libc::c_char);
(0..argc as isize)
.map(|i| {
let bytes = CStr::from_ptr(*argv.offset(i)).to_bytes().to_vec();
OsStringExt::from_vec(bytes)
})
.collect::<Vec<_>>()
};
Args { iter: vec.into_iter() }
}
方法
示例:
get_paginated_response