excel file with students list
This commit is contained in:
parent
173f3da52a
commit
a1fb4c1f49
1
.prettierignore
Normal file
1
.prettierignore
Normal file
@ -0,0 +1 @@
|
|||||||
|
*.html
|
52
app/admin.py
52
app/admin.py
@ -1,10 +1,14 @@
|
|||||||
from django.apps import apps
|
from django.apps import apps
|
||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
|
from django.shortcuts import HttpResponse
|
||||||
from django.contrib.admin.sites import AlreadyRegistered
|
from django.contrib.admin.sites import AlreadyRegistered
|
||||||
from django_summernote.admin import SummernoteModelAdmin
|
from django_summernote.admin import SummernoteModelAdmin
|
||||||
from .models import Announcement, Edition, School, Student
|
from .models import Announcement, Edition, School, Student
|
||||||
from django.db import transaction
|
from django.db import transaction
|
||||||
|
|
||||||
|
from io import BytesIO
|
||||||
|
import xlsxwriter
|
||||||
|
|
||||||
class AnnouncementModelAdmin(SummernoteModelAdmin):
|
class AnnouncementModelAdmin(SummernoteModelAdmin):
|
||||||
summernote_fields = ['content']
|
summernote_fields = ['content']
|
||||||
|
|
||||||
@ -15,7 +19,7 @@ class EditionModelAdmin(admin.ModelAdmin):
|
|||||||
change_form_template = 'admin/edition_buttons.html'
|
change_form_template = 'admin/edition_buttons.html'
|
||||||
|
|
||||||
def response_change(self, request, obj):
|
def response_change(self, request, obj):
|
||||||
if "_update-student-scores" in request.POST:
|
if '_update-student-scores' in request.POST:
|
||||||
file = obj.scores.open(mode='r')
|
file = obj.scores.open(mode='r')
|
||||||
content = filter(lambda x: x != '', file.read().split('\n'))
|
content = filter(lambda x: x != '', file.read().split('\n'))
|
||||||
file.close()
|
file.close()
|
||||||
@ -29,7 +33,7 @@ class EditionModelAdmin(admin.ModelAdmin):
|
|||||||
|
|
||||||
Student.objects.filter(identifier=row[0]).update(score_first=row[1], score_second=row[2])
|
Student.objects.filter(identifier=row[0]).update(score_first=row[1], score_second=row[2])
|
||||||
|
|
||||||
if "_update-disable-submissions" in request.POST and obj.active and obj.submissions:
|
if '_update-disable-submissions' in request.POST and obj.active and obj.submissions:
|
||||||
if obj.active is True:
|
if obj.active is True:
|
||||||
schools = School.objects.all()
|
schools = School.objects.all()
|
||||||
|
|
||||||
@ -40,7 +44,49 @@ class EditionModelAdmin(admin.ModelAdmin):
|
|||||||
obj.submissions = False
|
obj.submissions = False
|
||||||
obj.save()
|
obj.save()
|
||||||
|
|
||||||
return super().response_change(request, obj)
|
if '_generate-student-list' in request.POST:
|
||||||
|
year = obj.year
|
||||||
|
students = Student.objects.filter(identifier__startswith=year)
|
||||||
|
schools_set = {int(student.identifier.split('-')[1]) for student in students}
|
||||||
|
|
||||||
|
output = BytesIO()
|
||||||
|
workbook = xlsxwriter.Workbook(output)
|
||||||
|
|
||||||
|
worksheet = workbook.add_worksheet("Lista uczniów")
|
||||||
|
|
||||||
|
worksheet.write(0, 0, 'Identyfikator')
|
||||||
|
worksheet.write(0, 1, 'Wynik - eliminacje')
|
||||||
|
worksheet.write(0, 2, 'Wynik - finał')
|
||||||
|
worksheet.write(0, 3, 'Imię')
|
||||||
|
worksheet.write(0, 4, 'Nazwisko')
|
||||||
|
worksheet.write(0, 5, 'Klasa')
|
||||||
|
worksheet.write(0, 6, 'Szkoła - nazwa')
|
||||||
|
worksheet.write(0, 7, 'Szkoła - miejscowość')
|
||||||
|
worksheet.write(0, 8, 'Szkoła - adres')
|
||||||
|
|
||||||
|
row = 1
|
||||||
|
for school_id in schools_set:
|
||||||
|
for student in sorted(Student.objects.filter(identifier__startswith=f'{year}-{school_id}-'), key=lambda x: x.identifier.split('-')[2]):
|
||||||
|
worksheet.write(row, 0, student.identifier) # Identyfikator
|
||||||
|
worksheet.write(row, 1, student.score_first) # Wynik - eliminacje
|
||||||
|
worksheet.write(row, 2, student.score_second) # Wynik - finał
|
||||||
|
worksheet.write(row, 3, student.name) # Imię
|
||||||
|
worksheet.write(row, 4, student.surname) # Nazwisko
|
||||||
|
worksheet.write(row, 5, student.grade) # Klasa
|
||||||
|
worksheet.write(row, 6, student.school_name) # Szkoła - nazwa
|
||||||
|
worksheet.write(row, 7, student.school_town) # Szkoła - miejscowość
|
||||||
|
worksheet.write(row, 8, student.school_address) # Szkoła - adres
|
||||||
|
|
||||||
|
row += 1
|
||||||
|
|
||||||
|
workbook.close()
|
||||||
|
xlsx_data = output.getvalue()
|
||||||
|
|
||||||
|
response = HttpResponse(content_type='application/vnd.ms-excel')
|
||||||
|
response['Content-Disposition'] = 'attachment; filename=Uczniowie.xlsx'
|
||||||
|
response.write(xlsx_data)
|
||||||
|
|
||||||
|
return response
|
||||||
|
|
||||||
class StudentModelAdmin(admin.ModelAdmin):
|
class StudentModelAdmin(admin.ModelAdmin):
|
||||||
list_display = ('identifier', '__str__', 'grade')
|
list_display = ('identifier', '__str__', 'grade')
|
||||||
|
@ -1,9 +1,20 @@
|
|||||||
{% extends 'admin/change_form.html' %}
|
{% extends 'admin/change_form.html' %} {% block submit_buttons_bottom %}
|
||||||
|
{{ block.super }}
|
||||||
{% block submit_buttons_bottom %}
|
<div class="submit-row">
|
||||||
{{ block.super }}
|
<input
|
||||||
<div class="submit-row">
|
type="submit"
|
||||||
<input type="submit" value="Zaktualizuj wyniki uczniów" name="_update-student-scores">
|
value="Zaktualizuj wyniki uczniów"
|
||||||
<input type="submit" value="Wyłącz zgłoszenia" name="_update-disable-submissions">
|
name="_update-student-scores"
|
||||||
</div>
|
/>
|
||||||
|
<input
|
||||||
|
type="submit"
|
||||||
|
value="Wygeneruj listę uczniów"
|
||||||
|
name="_generate-student-list"
|
||||||
|
/>
|
||||||
|
<input
|
||||||
|
type="submit"
|
||||||
|
value="Wyłącz zgłoszenia"
|
||||||
|
name="_update-disable-submissions"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
{% endblock %}
|
{% endblock %}
|
@ -1,7 +1,8 @@
|
|||||||
Django
|
Django==3.2.5
|
||||||
django-cleanup
|
django-cleanup
|
||||||
django-crispy-forms
|
django-crispy-forms
|
||||||
django-summernote
|
django-summernote
|
||||||
django-crispy-bulma
|
django-crispy-bulma
|
||||||
psycopg2-binary
|
psycopg2-binary
|
||||||
python-dotenv
|
python-dotenv
|
||||||
|
XlsxWriter
|
Loading…
Reference in New Issue
Block a user