From 8691b0509a9b2c152a2a51c488bd362655a6c6ac Mon Sep 17 00:00:00 2001 From: Artem Bulgakov Date: Fri, 17 Jan 2025 02:13:41 +0300 Subject: [PATCH] revert: uploading several images in medical reference This contains bugs, so should be reverted This reverts commit 8d3f048a3ef93fcce9a27cbb1851d23831575232. This reverts commit 196cb901ca91ac5daad5b3f8bcb4ae9c4a2ef1ec. --- adminpage/media/views.py | 18 +++++----- .../sport/admin/medicalGroupReferenceAdmin.py | 19 +++++----- adminpage/sport/forms/__init__.py | 0 adminpage/sport/forms/medical.py | 12 ------- ...ve_medicalgroupreference_image_and_more.py | 32 ----------------- .../migrations/0126_merge_20250116_2312.py | 14 -------- adminpage/sport/models/__init__.py | 2 +- .../sport/models/medical_group_reference.py | 35 +++++++------------ adminpage/sport/signals/reference.py | 21 +++++------ .../sport/templates/med_group_reference.html | 6 +--- adminpage/sport/views/profile.py | 21 +++++++---- 11 files changed, 57 insertions(+), 123 deletions(-) delete mode 100644 adminpage/sport/forms/__init__.py delete mode 100644 adminpage/sport/forms/medical.py delete mode 100644 adminpage/sport/migrations/0124_remove_medicalgroupreference_image_and_more.py delete mode 100644 adminpage/sport/migrations/0126_merge_20250116_2312.py diff --git a/adminpage/media/views.py b/adminpage/media/views.py index d31b528f..68df4e52 100644 --- a/adminpage/media/views.py +++ b/adminpage/media/views.py @@ -4,21 +4,21 @@ from django.shortcuts import get_object_or_404 from django_sendfile import sendfile -from sport.models import Reference, SelfSportReport, MedicalGroupReferenceImage +from sport.models import Reference, SelfSportReport, MedicalGroupReference def download_student_object( request, klass, student_id: int, - image_path: str + **kwargs ): user = request.user if user.is_staff or user.pk == student_id: requested_entry = get_object_or_404( klass, - reference__student_id=student_id, - image=image_path + student_id=student_id, + **kwargs, ) return sendfile(request, requested_entry.image.path) else: @@ -61,14 +61,14 @@ def self_sport_download( @login_required def medical_group_reference_download( - request, - student_id: int, - filename: str, + request, + student_id: int, + filename: str, ): requested_path = request.path[len(settings.MEDIA_URL):] return download_student_object( request, - MedicalGroupReferenceImage, + MedicalGroupReference, student_id, - image_path=requested_path + image=requested_path ) diff --git a/adminpage/sport/admin/medicalGroupReferenceAdmin.py b/adminpage/sport/admin/medicalGroupReferenceAdmin.py index ffb10e34..d09fa8b0 100644 --- a/adminpage/sport/admin/medicalGroupReferenceAdmin.py +++ b/adminpage/sport/admin/medicalGroupReferenceAdmin.py @@ -4,7 +4,7 @@ from django.utils.html import format_html from sport.admin import site -from sport.models import MedicalGroupReference, MedicalGroupReferenceImage, MedicalGroup, MedicalGroupHistory +from sport.models import MedicalGroupReference, MedicalGroup, MedicalGroups, MedicalGroupHistory class StudentTextFilter(AutocompleteFilter): @@ -51,17 +51,13 @@ class Meta: ) -class MedicalGroupReferenceAdminImage(admin.TabularInline): - model = MedicalGroupReferenceImage - extra = 0 - - @admin.register(MedicalGroupReference, site=site) class MedicalGroupReferenceAdmin(admin.ModelAdmin): form = MedicalGroupReferenceForm list_display = ( "student", + "image", "resolved", ) @@ -78,17 +74,16 @@ class MedicalGroupReferenceAdmin(admin.ModelAdmin): fields = ( ("student", "uploaded"), ("medical_group", "comment"), - ("student_comment"), + ("student_comment", "reference_image"), ) readonly_fields = ( "student", "uploaded", + "reference_image", "student_comment", ) - inlines = (MedicalGroupReferenceAdminImage,) - def save_model(self, request, obj, form, change): if obj.resolved is None or 'comment' in form.changed_data or 'medical_group' in form.changed_data: obj.resolved = form.cleaned_data['medical_group'].pk > -2 @@ -97,5 +92,11 @@ def save_model(self, request, obj, form, change): def has_add_permission(self, request): return False + def reference_image(self, obj): + return format_html('', obj.image.url, obj.image.url) + + reference_image.short_description = 'Reference' + reference_image.allow_tags = True + class Media: pass diff --git a/adminpage/sport/forms/__init__.py b/adminpage/sport/forms/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/adminpage/sport/forms/medical.py b/adminpage/sport/forms/medical.py deleted file mode 100644 index da684b84..00000000 --- a/adminpage/sport/forms/medical.py +++ /dev/null @@ -1,12 +0,0 @@ -from django import forms - - -class MedicalGroupReferenceForm(forms.Form): - references = forms.ImageField() - student_comment = forms.CharField( - widget=forms.Textarea, - max_length=1024, - label="Comments (optional)", - required=False, - empty_value='-' - ) diff --git a/adminpage/sport/migrations/0124_remove_medicalgroupreference_image_and_more.py b/adminpage/sport/migrations/0124_remove_medicalgroupreference_image_and_more.py deleted file mode 100644 index 97cf01bc..00000000 --- a/adminpage/sport/migrations/0124_remove_medicalgroupreference_image_and_more.py +++ /dev/null @@ -1,32 +0,0 @@ -# Generated by Django 4.2 on 2024-11-28 09:58 - -from django.db import migrations, models -import django.db.models.deletion -import sport.models.medical_group_reference - - -class Migration(migrations.Migration): - - dependencies = [ - ('sport', '0123_auto_20230205_1938'), - ] - - operations = [ - migrations.RemoveField( - model_name='medicalgroupreference', - name='image', - ), - migrations.CreateModel( - name='MedicalGroupReferenceImage', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('image', models.ImageField(upload_to=sport.models.medical_group_reference.get_reference_path)), - ('reference', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='images', to='sport.medicalgroupreference', verbose_name='medical reference')), - ], - options={ - 'verbose_name': 'medical group reference image', - 'verbose_name_plural': 'medical group reference images', - 'db_table': 'medical_group_reference_image', - }, - ), - ] diff --git a/adminpage/sport/migrations/0126_merge_20250116_2312.py b/adminpage/sport/migrations/0126_merge_20250116_2312.py deleted file mode 100644 index f0acb834..00000000 --- a/adminpage/sport/migrations/0126_merge_20250116_2312.py +++ /dev/null @@ -1,14 +0,0 @@ -# Generated by Django 5.1.3 on 2025-01-16 20:12 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('sport', '0124_remove_medicalgroupreference_image_and_more'), - ('sport', '0125_alter_group_allowed_students'), - ] - - operations = [ - ] diff --git a/adminpage/sport/models/__init__.py b/adminpage/sport/models/__init__.py index cfc43da8..f463433c 100644 --- a/adminpage/sport/models/__init__.py +++ b/adminpage/sport/models/__init__.py @@ -6,7 +6,7 @@ from .enums import MedicalGroups, StudentStatuses, Gender from .group import Group from .medical_group import MedicalGroup -from .medical_group_reference import MedicalGroupReference, MedicalGroupReferenceImage +from .medical_group_reference import MedicalGroupReference from .medical_group_history import MedicalGroupHistory from .reference import Reference from .schedule import Schedule diff --git a/adminpage/sport/models/medical_group_reference.py b/adminpage/sport/models/medical_group_reference.py index 9c095cc7..f6255c8e 100644 --- a/adminpage/sport/models/medical_group_reference.py +++ b/adminpage/sport/models/medical_group_reference.py @@ -1,13 +1,16 @@ import uuid +from typing import Tuple from django.conf import settings from django.db import models +from sport.utils import SubmissionType + def get_reference_path(instance, filename): ext = filename.split('.')[-1] return f'{settings.MEDICAL_GROUP_REFERENCE_FOLDER}/' \ - f'{instance.reference.student.pk}/{uuid.uuid4()}.{ext}' + f'{instance.student.pk}/{uuid.uuid4()}.{ext}' class MedicalGroupReference(models.Model): @@ -16,6 +19,10 @@ class MedicalGroupReference(models.Model): on_delete=models.CASCADE, ) + image = models.ImageField( + upload_to=get_reference_path, + ) + resolved = models.BooleanField(null=True) semester = models.ForeignKey( @@ -29,30 +36,14 @@ class MedicalGroupReference(models.Model): null=False ) student_comment = models.TextField(max_length=1024, null=True, blank=True, verbose_name="Student's comment") + # def __str__(self): + # return f'{self.student} - {self.semester}' + + def get_submission_url(self) -> Tuple[SubmissionType, str]: + return SubmissionType.IMAGE, self.image.url def __str__(self): return f"{self.student} {self.uploaded.strftime('%Y-%m-%d %H:%M:%S')} for {self.semester}" class Meta: db_table = "medical_group_reference" - - -class MedicalGroupReferenceImage(models.Model): - reference = models.ForeignKey( - "MedicalGroupReference", - verbose_name="medical reference", - related_name="images", - on_delete=models.CASCADE, - ) - - image = models.ImageField( - upload_to=get_reference_path, - ) - - def __str__(self) -> str: - return f"{self.reference} image {self.pk}" - - class Meta: - db_table = "medical_group_reference_image" - verbose_name = "medical group reference image" - verbose_name_plural = "medical group reference images" diff --git a/adminpage/sport/signals/reference.py b/adminpage/sport/signals/reference.py index 2aedc89c..7a20baeb 100644 --- a/adminpage/sport/signals/reference.py +++ b/adminpage/sport/signals/reference.py @@ -2,9 +2,9 @@ from django.db.models.signals import post_save from django.dispatch.dispatcher import receiver -from sport.models import Reference, Group, MedicalGroupReference, MedicalGroupReferenceImage +from sport.models import Reference, Group, MedicalGroupReference from sport.signals.utils import create_attendance_record -from sport.utils import format_submission_html, SubmissionType +from sport.utils import format_submission_html @receiver(post_save, sender=Reference) @@ -59,25 +59,22 @@ def medical_group_updated( ): if created or instance.resolved is None: return - submissions_urls = '\n'.join( - [ - format_submission_html(SubmissionType.IMAGE, image.image.path) - for image in MedicalGroupReferenceImage.objects.filter( - reference_id=instance.pk - ) - ] - ) + if instance.resolved: instance.student.notify( *settings.EMAIL_TEMPLATES['medical_group_success'], semester=instance.semester, medical_group=instance.student.medical_group.name, - submission=submissions_urls + submission=format_submission_html( + *instance.get_submission_url() + ), ) else: instance.student.notify( *settings.EMAIL_TEMPLATES['medical_group_reject'], semester=instance.semester, comment=instance.comment, - submission=submissions_urls + submission=format_submission_html( + *instance.get_submission_url() + ), ) diff --git a/adminpage/sport/templates/med_group_reference.html b/adminpage/sport/templates/med_group_reference.html index 7f08d52c..af6404b7 100644 --- a/adminpage/sport/templates/med_group_reference.html +++ b/adminpage/sport/templates/med_group_reference.html @@ -29,11 +29,7 @@