简体   繁体   English

使用分页模块的 Django-Rest-Framework csv 模块

[英]Django-Rest-Framework csv module using paginated module

Hello I am using the django-rest-framework-csv module and I have followed the instructions to create a Paginated renderer using this code:您好,我正在使用django-rest-framework-csv模块,我已按照说明使用以下代码创建分页渲染器:

from rest_framework_csv.renderers import CSVRenderer

class PaginatedCSVRenderer (CSVRenderer):
    results_field = 'results'

    def render(self, data, media_type=None, renderer_context=None):
        if not isinstance(data, list):
            data = data.get(self.results_field, [])
        return super(PaginatedCSVRenderer, self).render(data, media_type, renderer_context)

as I found it on their github site: django-rest-framework-csv .正如我在他们的 github 站点上找到的那样: django-rest-framework-csv What I want the renderer to do is to return everything in the csv.我希望渲染器做的是返回 csv 中的所有内容。 Currently it only returns the current page.目前它只返回当前页面。 Can someone help?有人可以帮忙吗?

You can use python csv module to convert the page and return in csv . 您可以使用python csv模块转换页面并返回csv。 I haven't tested it but i think it should work. 我还没有测试过,但是我认为它应该可以工作。 I am assuming tab delimiter but you can change it. 我假设使用制表符分隔符,但可以更改它。

import csv

class PaginatedCSVRenderer (CSVRenderer):
    results_field = 'results'

    def render(self, data, media_type=None, renderer_context=None):
        if not isinstance(data, list):
            data = data.get(self.results_field, [])
        csv_input= super(PaginatedCSVRenderer, self).render(data, media_type, renderer_context)= csv.reader(open(txt_file, "rb"), delimiter = '\t')
        csv_output = csv.writer(csv_input)
        return csv_output

I know its been a long time since the question was posted - but I had the same requirement.我知道问题发布已经很长时间了 - 但我有同样的要求。

I ended up overriding get_page_size method of my PageNumberPagination s custom implementation.我最终覆盖了我的PageNumberPagination的自定义实现的get_page_size方法。

Here is what I did:这是我所做的:

from rest_framework.pagination import PageNumberPagination
from rest_framework.settings import api_settings
from rest_framework_csv.renderers import CSVRenderer


class CustomPageNumberPagination(PageNumberPagination):
    page_size = 20
    page_size_query_param = 'page_size'
    max_page_size = 50

    def get_page_size(self, request):
    '''
    Set page size to unlimited (by returning None) when request format is CSV.
    '''
        # My version limits this only for admin users but feel free to change it.
        if request.user and request.user.is_staff:
            try:
                data_format = request.query_params[api_settings.URL_FORMAT_OVERRIDE]
                if data_format == CSVRenderer.format:
                    return None
            except (KeyError, ValueError):
                pass

        return super(CustomPageNumberPagination, self).get_page_size(request)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 django-rest-framework + swagger ui:ImportError:没有名为rest_framework_swagger的模块 - django-rest-framework + swagger ui: ImportError: No module named rest_framework_swagger 使用django-rest-framework进行密码哈希处理? - Password hash using django-rest-framework? 使用API​​TestCase和django-rest-framework - using APITestCase with django-rest-framework 已经将django-rest-framework更新到了最新版本,为什么仍然有`No module named'django.core.urlresolvers'`错误? - Have updated the django-rest-framework to last version, why there still have the `No module named 'django.core.urlresolvers'` error? 使用django-rest-framework将模型对象序列化为JSON dict - Serialize model objects into a JSON dict using django-rest-framework 在 Django-REST-framework 中为 ModelViewSet 使用 defaultRouter() 时重定向错误 - Wrong redirects when using defaultRouter() for ModelViewSet in Django-REST-framework 使用序列化程序类 django-rest-framework 插入数据 - Insert data using serializer class django-rest-framework 使用 django-rest-framework 在 OneToOneField 上插入数据 - Insert data on OneToOneField using django-rest-framework 在django-rest-framework的过滤器中使用自定义方法 - Using custom methods in filter with django-rest-framework 使用视图的django-rest-framework通过POST返回500 - django-rest-framework using views returns 500 with a POST
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM