如何从atv的csv中的django过滤器中导出过滤数据

问题描述 投票:0回答:1

我有这样的模型:

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过滤器,如下所示:

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',]


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文件?

django django-rest-framework export-to-csv django-filter
1个回答
0
投票

我通过编写导出函数来访问已过滤的查询集.qs attribute [readthedocs.io]做到了这一点

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
© www.soinside.com 2019 - 2024. All rights reserved.