some more admin improvements
This commit is contained in:
+1
-1
@@ -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
@@ -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
@@ -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)
|
||||||
|
|||||||
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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")
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user