在 Django 休息框架分页中添加新值

问题描述

我想在分页返回处添加“isSuccess”。

例如

{
    "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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...