Skip to content

Commit

Permalink
тестовый экспорт в excel
Browse files Browse the repository at this point in the history
  • Loading branch information
DenisKoleda committed Feb 18, 2024
1 parent 7a9445b commit 6656b38
Show file tree
Hide file tree
Showing 5 changed files with 61 additions and 15 deletions.
7 changes: 4 additions & 3 deletions app/home/urls.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
# home/urls.py

from django.urls import path
from django.contrib.auth.views import LoginView
from . import views
from django.contrib.auth.decorators import login_required

urlpatterns = [
path('', views.homepage_view, name='homepage'),
path('', login_required(views.homepage_view), name='homepage'),
path('login/', views.login_view, name='login'),
path('logout/', views.logout_view, name='logout'),
path('change_password/', views.change_password, name='change_password'),
path('change_password/', login_required(views.change_password),
name='change_password'),
]
Binary file modified app/task/__pycache__/admin.cpython-312.pyc
Binary file not shown.
Binary file modified app/task/__pycache__/urls.cpython-312.pyc
Binary file not shown.
41 changes: 41 additions & 0 deletions app/task/admin.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
from django.contrib import admin
from django.http import FileResponse
import xlsxwriter
from io import BytesIO
from .models import Task, Comment, FileAttachment, ChecklistTemplate, ChecklistItem, ChecklistItemStatus, TaskStatus
from django.contrib.auth.models import User

# Register your models here.

Expand Down Expand Up @@ -29,6 +33,43 @@ class TaskAdmin(admin.ModelAdmin):
search_fields = ['author', 'ticket', 'ticket_comment',
'priority', 'status', 'executor']

def export_to_excel(modeladmin, request, queryset):
output = BytesIO()
workbook = xlsxwriter.Workbook(output)

worksheet = workbook.add_worksheet()

fields = Task._meta.fields # Get direct fields of the Task model
# Get the names of the fields
field_names = [field.verbose_name for field in fields]

for i, field_name in enumerate(field_names):
worksheet.write(0, i, field_name)

# Get all Task objects
for row_num, task in enumerate(Task.objects.all(), start=1):
for col_num, field in enumerate(fields):
value = getattr(task, field.name)
if isinstance(value, User): # If the value is a User object, get the username
value = value.username
# If the value is a ChecklistTemplate object, get the name
if isinstance(value, ChecklistTemplate):
value = value.name
# Write the field values to the Excel
worksheet.write(row_num, col_num, value)

workbook.close()

output.seek(0)

response = FileResponse(
output, as_attachment=True, filename='tasks.xlsx')
return response

export_to_excel.short_description = "Export All"

actions = [export_to_excel]


@admin.register(Comment)
class CommentAdmin(admin.ModelAdmin):
Expand Down
28 changes: 16 additions & 12 deletions app/task/urls.py
Original file line number Diff line number Diff line change
@@ -1,21 +1,25 @@
from django.urls import re_path, path
from django.contrib.auth.decorators import login_required

from . import views, consumers

urlpatterns = [
path('', views.tasks_list, name='task_list'),
path('new/', views.task_create, name='task_create'),
path('<int:pk>/edit/', views.task_edit, name='task_edit'),
path('<int:pk>/delete/', views.task_delete, name='task_delete'),
path('<int:pk>/view/', views.task_view, name='task_view'),
path('<int:pk>/add_comment/', views.add_comment, name='add_comment'),
path('', login_required(views.tasks_list), name='task_list'),
path('new/', login_required(views.task_create), name='task_create'),
path('<int:pk>/edit/', login_required(views.task_edit), name='task_edit'),
path('<int:pk>/delete/', login_required(views.task_delete), name='task_delete'),
path('<int:pk>/view/', login_required(views.task_view), name='task_view'),
path('<int:pk>/add_comment/',
login_required(views.add_comment), name='add_comment'),
path('<int:pk>/delete_comment/<int:comment_id>/',
views.delete_comment, name='delete_comment'),
path('<int:pk>/add_file/', views.add_file, name='add_file'),
# path('<int:pk>/save_checklist/', views.save_checklist, name='save_checklist'),
path('download/<int:pk>/', views.download_file, name='download_file'),
path('delete_file/<int:pk>/', views.delete_file, name='delete_file'),
path('statistics/', views.task_statistics, name='statistics'),
login_required(views.delete_comment), name='delete_comment'),
path('<int:pk>/add_file/', login_required(views.add_file), name='add_file'),
# path('<int:pk>/save_checklist/', login_required(views.save_checklist), name='save_checklist'),
path('download/<int:pk>/', login_required(views.download_file),
name='download_file'),
path('delete_file/<int:pk>/',
login_required(views.delete_file), name='delete_file'),
path('statistics/', login_required(views.task_statistics), name='statistics'),
# Добавьте эту строку для WebSocket маршрута
re_path(r'ws/tasks/$', consumers.TaskConsumer.as_asgi()),
]

0 comments on commit 6656b38

Please sign in to comment.