[fix] excel download
This commit is contained in:
@@ -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",
|
||||||
|
)
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -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")
|
||||||
|
|||||||
Reference in New Issue
Block a user