[fix] excel download

This commit is contained in:
FlyingPigeon-py
2024-04-02 20:34:56 +03:00
parent e5faea0df4
commit 88b93f7321
2 changed files with 25 additions and 37 deletions
+6
View File
@@ -2,6 +2,7 @@ from django.urls import include, path
from rest_framework import routers from rest_framework import routers
from api.users.views import ( from api.users.views import (
DownloadUsersFromExcelView,
RegisterUsersFromExcelView, RegisterUsersFromExcelView,
UserViewSet, UserViewSet,
) )
@@ -19,4 +20,9 @@ urlpatterns = [
RegisterUsersFromExcelView.as_view(), RegisterUsersFromExcelView.as_view(),
name="excel-upload", name="excel-upload",
), ),
path(
"download/excel/<event_id>/",
DownloadUsersFromExcelView.as_view(),
name="excel-download",
)
] ]
+22 -40
View File
@@ -1,5 +1,8 @@
import io
import pandas as pd import pandas as pd
from django.http import FileResponse
from rest_framework import status from rest_framework import status
from rest_framework.response import Response from rest_framework.response import Response
from rest_framework.views import APIView from rest_framework.views import APIView
@@ -8,10 +11,6 @@ from rest_framework.viewsets import ModelViewSet
from api.events.models import Event from api.events.models import Event
from api.users.models import User from api.users.models import User
from api.users.serializers import UserSerializer from api.users.serializers import UserSerializer
from django.http import HttpResponse
from rest_framework.views import APIView
from rest_framework.response import Response
import pandas as pd
class UserViewSet(ModelViewSet): class UserViewSet(ModelViewSet):
@@ -61,40 +60,23 @@ class RegisterUsersFromExcelView(APIView):
) )
class ExportUsersExcel(APIView): class DownloadUsersFromExcelView(APIView):
def get(self, request, event_id): def get(self, _, event_id):
event = Event.objects.get(id=event_id) try:
users = Event.objects.get(pk=event_id).users
users = event.users.all() except Event.DoesNotExist:
return Response(
users_data = { {"error": "Event does not exist"},
"First Name": [user.first_name for user in users], status=status.HTTP_404_NOT_FOUND,
"Last Name": [user.last_name for user in users],
"Email": [user.email for user in users],
"Birth Date": [
user.birth_date.strftime("%Y-%m-%d") for user in users
],
"Bio": [user.bio for user in users],
}
df = pd.DataFrame(users_data)
excel_file = pd.ExcelWriter("event_users.xlsx", engine="xlsxwriter")
df.to_excel(excel_file, index=False, sheet_name="Users")
excel_file.save()
with open("event_users.xlsx", "rb") as excel:
content = excel.read()
# Удаляем созданный временный файл
import os
os.remove("event_users.xlsx")
# Отправляем Excel файл как HttpResponse
response = HttpResponse(
content, content_type="application/vnd.ms-excel"
) )
response[
"Content-Disposition" serializer = UserSerializer(users, many=True)
] = 'attachment; filename="event_users.xlsx"' data = serializer.data
return response
data = pd.DataFrame(data)
excel_data = io.BytesIO()
data.to_excel(excel_data, index=False)
excel_data.seek(0)
return FileResponse(excel_data, filename="users.xlsx")