【问题标题】:How to export filtered data from django-filters in csv fromat如何以 csv 格式从 django-filters 导出过滤后的数据
【发布时间】:2020-09-14 09:47:39
【问题描述】:

我有一个这样的模型:

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-filters:

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】:

    我设法通过编写一个导出函数来访问过滤后的查询集.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
    

    【讨论】:

      猜你喜欢
      • 2021-06-16
      • 1970-01-01
      • 2020-06-12
      • 1970-01-01
      • 2013-06-25
      • 1970-01-01
      • 2021-08-17
      • 1970-01-01
      • 2012-10-20
      相关资源
      最近更新 更多