Improved data ordering in requests and addes ac types CAP10
This commit is contained in:
@@ -18,7 +18,7 @@ from ..models.students import Student
|
||||
|
||||
from ..custom.colortag import course_color
|
||||
|
||||
from typing import Any, Dict
|
||||
from typing import Any, Dict, List
|
||||
|
||||
# Custom import form to select a course for student input
|
||||
class StudentCustomConfirmImportForm(ConfirmImportForm):
|
||||
@@ -56,18 +56,19 @@ class StudentResource(ModelResource):
|
||||
|
||||
# Form Class for Student course change
|
||||
class ChangeCourseForm(AdminActionForm):
|
||||
course = TypedMultipleChoiceField(choices=AircraftTypes)
|
||||
course = ModelChoiceField(queryset=Course.objects.all().order_by("ctype", "-cnumber"))
|
||||
|
||||
# Form class to assing aircrafts to students
|
||||
class ChangeAircraftForm(AdminActionForm):
|
||||
aircrafts = ModelMultipleChoiceField(queryset=Aircraft.objects.distinct('type').all())
|
||||
#aircrafts = ModelMultipleChoiceField(queryset=Aircraft.objects.distinct("type").order_by("type"))
|
||||
aircrafts = TypedMultipleChoiceField(choices=AircraftTypes)
|
||||
|
||||
class StudentAdmin(ImportMixin, AdminActionFormsMixin, admin.ModelAdmin):
|
||||
model = Student
|
||||
list_display = ("surname", "name", "course", "course_color", "email", "phone", "username", "password", "active", )
|
||||
list_filter = ("course", "active", )
|
||||
search_fields = ("surname", "name", "phone", "email", )
|
||||
actions = ("change_course", "disable_students", "change_aircraft", )
|
||||
actions = ("change_course", "deactivate_students", "change_aircraft", )
|
||||
resource_classes = [StudentResource]
|
||||
confirm_form_class = StudentCustomConfirmImportForm
|
||||
tmp_storage_class = CacheStorage
|
||||
@@ -88,7 +89,7 @@ class StudentAdmin(ImportMixin, AdminActionFormsMixin, admin.ModelAdmin):
|
||||
return SafeText(obj.default_username())
|
||||
|
||||
@admin.action(description="Deactivate Students")
|
||||
def disable_students(self, request: HttpRequest, queryset: QuerySet[Student]):
|
||||
def deactivate_students(self, request: HttpRequest, queryset: QuerySet[Student]):
|
||||
for q in queryset.all():
|
||||
if q.user:
|
||||
q.user.is_staff = False
|
||||
@@ -102,13 +103,13 @@ class StudentAdmin(ImportMixin, AdminActionFormsMixin, admin.ModelAdmin):
|
||||
count: int = queryset.update(course=course)
|
||||
messages.success(request, f"{count} students updated to {course}")
|
||||
|
||||
@action_with_form(ChangeAircraftForm, description="Assign Aircraft")
|
||||
def change_aircraft(self, request: HttpRequest, queryset: QuerySet[Student], data: Dict[str, QuerySet[Aircraft]]):
|
||||
ac_types = [t.type for t in data["aircrafts"]]
|
||||
@action_with_form(ChangeAircraftForm, description="Assign Aircraft Type")
|
||||
def change_aircraft(self, request: HttpRequest, queryset: QuerySet[Student], data: Dict[str, List[AircraftTypes]]):
|
||||
ac_types: List[AircraftTypes] = data["aircrafts"]
|
||||
ac_query: Q = Q() # Build an or query to select all aircrafts of the specified types
|
||||
for a in ac_types:
|
||||
for a in data["aircrafts"]:
|
||||
ac_query |= Q(type=a)
|
||||
aircrafts: QuerySet[Aircraft] = Aircraft.objects.filter(ac_query).all() # Execute query
|
||||
aircrafts: QuerySet[Aircraft] = Aircraft.objects.filter(ac_query).order_by("type", "markings").all() # Execute query
|
||||
i: int = 0
|
||||
for student in queryset:
|
||||
student.aircrafts.clear()
|
||||
|
||||
Reference in New Issue
Block a user