Reputation: 31
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
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