Как экспортировать данные о книгах определенного жанра в формат CSV или JSON

views.py

class ExportBooksAPIView(APIView):
    permission_classes = [IsAuthenticated]

    def get_queryset(self, genre_id):
        try:
            genre = Genre.objects.get(id=genre_id)
            books = genre.books.all()  
            return books
        except Genre.DoesNotExist:
            return None

    def get(self, request):
        genre_id = request.GET.get('genre_id') 
        
        if not genre_id:
            return Response("Genre ID not specified in the request.", status=status.HTTP_400_BAD_REQUEST)

        books = self.get_queryset(genre_id)
        if not books:
            return Response(f"Genre with ID '{genre_id}' not found.", status=status.HTTP_404_NOT_FOUND)

        serializer = BookSerializer(books, many=True)

        csv_data = self.serialize_to_csv(serializer.data)

        response = HttpResponse(content_type='text/csv')
        response['Content-Disposition'] = f'attachment; filename="data_books.csv"'
        response.write(csv_data)

        return response

    def serialize_to_csv(self, data):
        csv_buffer = io.StringIO()
        csv_writer = csv.writer(csv_buffer)

        header_row = ['Book Name', 'Author Name', 'Number of Pages']
        csv_writer.writerow(header_row)

        for book in data:
            csv_writer.writerow([book.get('name', ''), book.get('author', {}).get('name', ''), book.get('pages', '')])

        return csv_buffer.getvalue()

core/urls.py

py 
path('export-books/', ExportBooksAPIView.as_view(), name='export_books'),
]

project/urls.py

path('genre/',include('core.urls')),

Почтальон

экспорт всех данные для определенного жанра в структурированном формате (например, CSV или JSON).

Но я получаю

{ "detail": "Не найдено". }

я должен получить подробную информацию обо всех книгах, которые относятся к определенному жанру

Вернуться на верх