Metadata-Version: 1.1
Name: django-export-csv
Version: 0.1.1
Summary: a CSV exporter for Django
Home-page: https://github.com/oddcc/django-export-csv
Author: oddcc
Author-email: skycc71640@gmail.com
License: MIT License
Description: # django-export-csv
        [中文文档](https://github.com/oddcc/django-export-csv/blob/master/README_CN.md)
        ## Introduction
        a CSV exporter for Django
        this tool create a shortcut to render a queryset to a CSV steaming HTTP response. 
        support custom CSV file in this ways:
        1. custom filename
        2. add a datestamp mechanism to filename
        3. use/not use verbose_name
        4. support exclude fields that you don't want to export
        5. custom field order
        6. custom CSV header row
        7. custom serializer field
        8. custom field(handle many-to-one, many-to-many, one-to-many relationship)
        
        ## install
        Run:
        ```
        pip install django-export-csv
        ```
        Support Python 2.7 and 3.5, Django >= 1.8.
        
        ## usage
        let your Class-based views which inherit `ListView` or `MultipleObjectMixin` also inherit `QueryCsvMixin`, then you can use `render_csv_response` to turn a queryset into a response with a CSV attachment. `render_csv_response` takes a `QuerySet` or a `ValuesQuerySet` instance:
        
        ### CBV
        ```python
        from django_export_csv import QueryCsvMixin
        from django.views.generic.list import ListView
        
        from .models import Student
        
        
        class StudentListView(QueryCsvMixin, ListView):
            queryset = Student.objects.all()
        
            def get(self, *args, **kwargs):
                return self.render_csv_response(queryset)
        ```
        
        ### FBV
        ```python
        from django_export_csv import render_csv_response
        
        
        def student_list_view(request):
            if request.method == 'GET':
                queryset = Student.objects.all()
                return render_csv_response(queryset)
        ```
        
        ## custom CSV
        once you inherit `QueryCsvMixin`, then you can use following arguments to custom CSV export:
        1. `filename` - (default: `None`), this argument should be a `str`; if not given(means use default), the CSV filename will be generated by model name.
        2. `add_datestamp` - (default: `False`), this argument should be boolean, if it is `True`, filename will be add a datestamp.
        3. `use_verbose_names` - (default: `True`), this argument should be boolean, if it is `True`, CSV header will use model field's verbose_name.
        4. `exclude_field` - (default: `[]`), this should be a list which include field's name you don't want to export.
        5. `field_order` - (default: `[]`), this should be a list to determine field order, any fields not specified will follow those in the list.
        6. `field_header_map` - (default: `{}`), A dictionary mapping model field's name to CSV column header name. Has a higher priority than the `use_verbose_names`.
        7. `field_serializer_map` - (default: `{}`), A dictionary mapping model field's name to field serializer which take field's value and return serializered value.
        8. `extra_field` - (default: `[]`), should be a list. Used to customize foreign key(many-to-one), many-to-many relationships, foreign key reverse query(one-to-many), or other customize fields. Note that fields in `extra_field` must be a corresponding serializer in `field_serializer_map` to work. 
        
        e.g:
        
        ```python
        # data_init.py
        import datetime
        from .models import Student, College
        
        
        def create_student_and_get_queryset():
            college1, _ = College.objects.get_or_create(name="College 1st")
            college2, _ = College.objects.get_or_create(name="College 2nd")
        
            Student.objects.get_or_create(
                name='Jim', age=18, is_graduated=False, birthday=datetime.date(1998,6,6), college=college1
            )
            Student.objects.get_or_create(
                name='Bing', age=22, is_graduated=True, birthday=datetime.date(1994, 2, 6), college=college1
            )
            Student.objects.get_or_create(
                name='Monica', age=25, is_graduated=True, birthday=datetime.date(1991, 2, 6), college=college2
            )
        
            return Student.objects.all()
        
        ```
        
        ```python
        # views.py
        from django_export_csv import QueryCsvMixin
        from django_export_csv import render_csv_response
        from django.views.generic.list import ListView
        
        from .models import Student
        from .data_init import create_student_and_get_queryset
        
        
        def boolean_serializer(value):
            if value == True:
                return 'Y'
            else:
                return 'N'
                
                
        def college_serializer(obj):
            return obj.college.name
        
        
        # CBV
        class StudentListView(QueryCsvMixin, ListView):
            filename = 'export_student_list'
            add_datestamp = True
            use_verbose_names = True
            exclude_field = ['id']
            field_order = ['name', 'is_graduated']
            field_header_map = {'is_graduated': 'Graduated'}
            field_serializer_map = {'is_graduated': boolean_serializer, 'college': college_serializer}
            queryset = Student.objects.all()
            extra_field = ['college']
        
            def get(self, *args, **kwargs):
                queryset = create_student_and_get_queryset()
                return self.render_csv_response(queryset)
                
        
        # FBV
        def student_list_view(request):
            filename = 'export_student_list'
            add_datestamp = True
            use_verbose_names = True
            exclude_field = ['id']
            field_order = ['name', 'is_graduated']
            field_header_map = {'is_graduated': 'Graduated'}
            field_serializer_map = {'is_graduated': boolean_serializer, 'college': college_serializer}
            extra_field = ['college']
        
            if request.method == 'GET':
                queryset = create_student_and_get_queryset()
                return render_csv_response(
                    queryset, filename=filename, add_datestamp=add_datestamp, use_verbose_names=use_verbose_names,
                    exclude_field=exclude_field, field_order=field_order, field_header_map=field_header_map,
                    field_serializer_map=field_serializer_map, extra_field=extra_field
                )
        ```
        
Keywords: django,csv,export,queryset
Platform: UNKNOWN
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: Programming Language :: Python
Classifier: Environment :: Plugins
Classifier: Framework :: Django
Classifier: License :: OSI Approved :: GNU General Public License (GPL)
