Как экспортировать отфильтрованные данные из django -фильтров в csv fromat - PullRequest
0 голосов
/ 27 мая 2020

У меня есть такая модель:

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

и реализованы django -фильтры следующим образом:

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= вернуть все данные, состоящие из местоположения с именем cafe.

Как я могу экспортировать его в файл CSV?

1 Ответ

0 голосов
/ 27 мая 2020

Мне удалось это сделать, написав функцию экспорта для доступа к отфильтрованному набору запросов .qs атрибут [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
...