Chronicles041
Chronicles041

Reputation: 31

How to export filtered data from django-filters in csv fromat

I have a model like this:

class Location(models.Model):
    name = models.CharField(max_length=100)
    name_short_code = models.CharField(max_length=50)
    address = models.CharField(max_length=100)

and implemented django-filters like this:

In filter.py:

from django_filters import rest_framework as filters
from api.models import Location

class LocationFilter(filters.FilterSet):
    id = filters.NumberFilter(lookup_expr='icontains')
    name = filters.CharFilter(lookup_expr='icontains')
    address = filters.CharFilter(lookup_expr='icontains')

    class Meta:
        model = Location
        fields = ['id', 'name', 'address',]


In views.py:

from api.filter import LocationFilter

class LocationViewSet(viewsets.ModelViewSet):
    queryset = Location.objects.all()
    serializer_class = LocationSerializer
    filter_backends = [filters.DjangoFilterBackend]
    filterset_class = LocationFilter  

URL-http://127.0.0.1:8000/api/location/?id=&name=Cafe&address= return all data consisting location named cafe.

How can i export it to a CSV file?

Upvotes: 1

Views: 2182

Answers (1)

Chronicles041
Chronicles041

Reputation: 31

I managed to do it by writing a export function for accessing the filtered queryset .qs attribute [readthedocs.io]

In views.py:

def export_filter_location(request):
    location = Location.objects.all()
    filter = LocationFilter(request.GET, queryset=location).qs
    response = HttpResponse(content_type='text/csv')
    file_name = "fltred_loaction_data" + str(datetime.today()) + ".csv"

    writer = csv.writer(response)
    writer.writerow(['id','Name', 'Name_short_code', 'Address'])
    for i in filter.values_list('id','name', 'name_short_code', 'address'):
        writer.writerow(i)
    response['Content-Disposition'] = 'attachment; filename = "' + file_name + '"'
    return response

Upvotes: 2

Related Questions