some more admin improvements

This commit is contained in:
Ross
2024-07-29 11:38:52 +01:00
parent d8c83ae750
commit 74d300ab16
8 changed files with 105 additions and 17 deletions
+1 -1
View File
@@ -409,7 +409,7 @@ class Exam(ExamBase):
related_name="anatomy_user_user_groups" related_name="anatomy_user_user_groups"
) )
exam_user_status = GenericRelation(ExamUserStatus) exam_user_status = GenericRelation(ExamUserStatus, related_query_name="anatomy_exams")
examcollection = models.ForeignKey(ExamCollection, blank=True, null=True, on_delete=models.SET_NULL, related_name="anatomy_exams") examcollection = models.ForeignKey(ExamCollection, blank=True, null=True, on_delete=models.SET_NULL, related_name="anatomy_exams")
+1 -1
View File
@@ -810,7 +810,7 @@ class CaseCollection(ExamOrCollectionGenericBase):
help_text="If true allows users self complete and review cases in a self directed way.", help_text="If true allows users self complete and review cases in a self directed way.",
) )
exam_user_status = GenericRelation(ExamUserStatus) exam_user_status = GenericRelation(ExamUserStatus, related_query_name="atlas_exams")
feedback_once_collection_complete = models.BooleanField(default=True, help_text="If true feedback is only given once the collection is complete. If false feedback is given after each case.") feedback_once_collection_complete = models.BooleanField(default=True, help_text="If true feedback is only given once the collection is complete. If false feedback is given after each case.")
+99 -10
View File
@@ -1,11 +1,17 @@
from longs.models import Exam from longs.models import Exam as LongExam
from rapids.models import Exam as RapidExam
from anatomy.models import Exam as AnatomyExam
from physics.models import Exam as PhysicsExam
from sbas.models import Exam as SbasExam
from atlas.models import CaseCollection as AtlasExam
from django.contrib import admin from django.contrib import admin
# Register your models here. # Register your models here.
from .models import ( from .models import (
CidUserGroup, CidUserGroup,
Examination, Examination,
#Sign, # Sign,
Modality, Modality,
Plane, Plane,
Contrast, Contrast,
@@ -18,15 +24,26 @@ from .models import (
UserProfile, UserProfile,
Supervisor, Supervisor,
ExamCollection, ExamCollection,
Site Site,
) )
def custom_title_filter_factory(filter_cls, title):
class Wrapper(filter_cls):
def __new__(cls, *args, **kwargs):
instance = filter_cls(*args, **kwargs)
instance.title = title
return instance
return Wrapper
# from .models import Examination, Sign, Site, Condition # from .models import Examination, Sign, Site, Condition
admin.site.register(Examination) admin.site.register(Examination)
#admin.site.register(Sign) # admin.site.register(Sign)
admin.site.register(Site) admin.site.register(Site)
#admin.site.register(Condition) # admin.site.register(Condition)
admin.site.register(Plane) admin.site.register(Plane)
admin.site.register(Contrast) admin.site.register(Contrast)
admin.site.register(QuestionNote) admin.site.register(QuestionNote)
@@ -39,22 +56,94 @@ admin.site.register(Supervisor)
admin.site.register(Modality) admin.site.register(Modality)
admin.site.register(ExamCollection) admin.site.register(ExamCollection)
class ExamListFilter(admin.SimpleListFilter):
#title = "Long Exams"
#parameter_name = "exam"
#exam_model = None
def __init__(self, request, params, model, model_admin):
self.parameter_name = self.related_field_name
super().__init__(request, params, model, model_admin)
def lookups(self, request, model_admin):
return [(exam.id, exam.name) for exam in self.exam_model.objects.all()]
def queryset(self, request, queryset):
if self.value():
#return queryset.filter(longs_exams__id=self.value())
kwargs = {f"{self.related_field_name}__id": self.value()}
return queryset.filter(**kwargs)
return queryset
class LongExamListFilter(ExamListFilter):
title = "Long Exams"
related_field_name = "longs_exams"
exam_model = LongExam
class RapidExamListFilter(ExamListFilter):
title = "Rapid Exams"
related_field_name = "rapids_exams"
exam_model = RapidExam
class AnatomyExamListFilter(ExamListFilter):
title = "Anatomy Exams"
related_field_name = "anatomy_exams"
exam_model = AnatomyExam
class PhysicsExamListFilter(ExamListFilter):
title = "Physics Exams"
related_field_name = "physics_exams"
exam_model = PhysicsExam
class SbasExamListFilter(ExamListFilter):
title = "Sbas Exams"
related_field_name = "sbas_exams"
exam_model = SbasExam
class AtlasExamListFilter(ExamListFilter):
title = "Atlas Exams"
related_field_name = "atlas_exams"
exam_model = AtlasExam
class CidUserExamAdmin(admin.ModelAdmin): class CidUserExamAdmin(admin.ModelAdmin):
list_filter = ('cid_user', 'user_user', 'completed') list_filter = ("cid_user", "user_user", "completed")
def get_queryset(self, request): def get_queryset(self, request):
qs = super().get_queryset(request).prefetch_related('cid_user', 'user_user', 'exam') qs = (
super()
.get_queryset(request)
.prefetch_related("cid_user", "user_user", "exam")
)
return qs return qs
admin.site.register(CidUserExam, CidUserExamAdmin) admin.site.register(CidUserExam, CidUserExamAdmin)
class ExamUserStatusAdmin(admin.ModelAdmin): class ExamUserStatusAdmin(admin.ModelAdmin):
list_filter = ('status', 'cid_user_exam__user_user', 'cid_user_exam__cid_user') list_filter = (
"status",
"cid_user_exam__user_user",
"cid_user_exam__cid_user",
LongExamListFilter,
RapidExamListFilter,
AnatomyExamListFilter,
PhysicsExamListFilter,
SbasExamListFilter,
AtlasExamListFilter,
)
exclude = ("anatomy_exams", "longs_exams", "rapids_exams", "physics_exams", "sbas_exams", "atlas_exams")
readonly_fields = ("cid_user_exam",)
def get_queryset(self, request): def get_queryset(self, request):
qs = super().get_queryset(request).prefetch_related('cid_user_exam', 'exam') qs = super().get_queryset(request).prefetch_related("cid_user_exam", "exam")
return qs return qs
admin.site.register(ExamUserStatus, ExamUserStatusAdmin)
admin.site.register(ExamUserStatus, ExamUserStatusAdmin)
-1
View File
@@ -871,7 +871,6 @@ class ExamBase(ExamOrCollectionGenericBase):
def __str__(self): def __str__(self):
if self.start_date and self.start_date is not None: if self.start_date and self.start_date is not None:
print(f"Start date: {self.start_date:%d %B %Y}")
return f"{self.name} ({self.start_date:%d %B %Y})" return f"{self.name} ({self.start_date:%d %B %Y})"
else: else:
return self.name return self.name
+1 -1
View File
@@ -472,7 +472,7 @@ class Exam(ExamBase):
related_name="longs_user_user_groups", related_name="longs_user_user_groups",
) )
exam_user_status = GenericRelation(ExamUserStatus) exam_user_status = GenericRelation(ExamUserStatus, related_query_name="longs_exams")
examcollection = models.ForeignKey(ExamCollection, blank=True, null=True, on_delete=models.SET_NULL, related_name="longs_exams") examcollection = models.ForeignKey(ExamCollection, blank=True, null=True, on_delete=models.SET_NULL, related_name="longs_exams")
+1 -1
View File
@@ -190,7 +190,7 @@ class Exam(ExamBase):
related_name="physics_user_user_groups" related_name="physics_user_user_groups"
) )
exam_user_status = GenericRelation(ExamUserStatus) exam_user_status = GenericRelation(ExamUserStatus, related_query_name="physics_exams")
examcollection = models.ForeignKey(ExamCollection, blank=True, null=True, on_delete=models.SET_NULL, related_name="physics_exams") examcollection = models.ForeignKey(ExamCollection, blank=True, null=True, on_delete=models.SET_NULL, related_name="physics_exams")
+1 -1
View File
@@ -651,7 +651,7 @@ class Exam(ExamBase):
related_name="rapid_user_user_groups", related_name="rapid_user_user_groups",
) )
exam_user_status = GenericRelation(ExamUserStatus) exam_user_status = GenericRelation(ExamUserStatus, related_query_name="rapids_exams")
examcollection = models.ForeignKey(ExamCollection, blank=True, null=True, on_delete=models.SET_NULL, related_name="rapids_exams") examcollection = models.ForeignKey(ExamCollection, blank=True, null=True, on_delete=models.SET_NULL, related_name="rapids_exams")
+1 -1
View File
@@ -206,7 +206,7 @@ class Exam(ExamBase):
related_name="sba_user_user_groups" related_name="sba_user_user_groups"
) )
exam_user_status = GenericRelation(ExamUserStatus) exam_user_status = GenericRelation(ExamUserStatus, related_query_name="sba_exams")
examcollection = models.ForeignKey(ExamCollection, blank=True, null=True, on_delete=models.SET_NULL, related_name="sbas_exams") examcollection = models.ForeignKey(ExamCollection, blank=True, null=True, on_delete=models.SET_NULL, related_name="sbas_exams")