Added instructor model, admin and basic actions
This commit is contained in:
65
cntmanage/flightslot/admins/instructor_admin.py
Normal file
65
cntmanage/flightslot/admins/instructor_admin.py
Normal file
@@ -0,0 +1,65 @@
|
||||
from django.forms import TypedMultipleChoiceField
|
||||
from django.db.models.query import QuerySet
|
||||
from django.http import HttpRequest
|
||||
from django.contrib import admin, messages
|
||||
from django.utils.safestring import SafeText
|
||||
|
||||
from django_admin_action_forms import AdminActionFormsMixin, AdminActionForm, action_with_form
|
||||
|
||||
from ..models.instructors import Instructor
|
||||
from ..models.aircrafts import AircraftTypes
|
||||
from ..models.missions import MissionTypes
|
||||
|
||||
from ..actions.assign_profile import assign_profile
|
||||
from ..actions.assign_aircraft import assign_aircraft
|
||||
|
||||
from typing import Dict, List
|
||||
|
||||
# Form class to assing aircrafts to instructors
|
||||
class AssignMissionForm(AdminActionForm):
|
||||
mission_profiles = TypedMultipleChoiceField(choices=MissionTypes)
|
||||
|
||||
# Form class to assing aircrafts to instructors
|
||||
class AssignAircraftForm(AdminActionForm):
|
||||
aircrafts = TypedMultipleChoiceField(choices=AircraftTypes)
|
||||
|
||||
class InstructorAdmin(AdminActionFormsMixin, admin.ModelAdmin):
|
||||
model = Instructor
|
||||
list_display = ("surname", "name", "email", "phone", "assigned_profiles", "assigned_aircrafts", "active", )
|
||||
search_fields = ("surname", "name", "phone", "email", )
|
||||
readonly_fields = ("username", "password", )
|
||||
actions = ("assign_aircraft", "assign_profile", )
|
||||
|
||||
@admin.display(description="Password")
|
||||
def password(self, obj: Instructor) -> SafeText:
|
||||
return SafeText(obj.default_password())
|
||||
|
||||
@admin.display(description="Username")
|
||||
def username(self, obj: Instructor) -> SafeText:
|
||||
return SafeText(obj.default_username())
|
||||
|
||||
@admin.display(description="Assigned Profiles")
|
||||
def assigned_profiles(self, obj: Instructor) -> SafeText:
|
||||
if not obj.aircrafts:
|
||||
return SafeText("")
|
||||
return SafeText("/".join(mix.mtype for mix in obj.missions.distinct("mtype").order_by("mtype").all()))
|
||||
|
||||
@admin.display(description="Assigned Aircrafts")
|
||||
def assigned_aircrafts(self, obj: Instructor) -> SafeText:
|
||||
if not obj.aircrafts:
|
||||
return SafeText("")
|
||||
return SafeText("/".join(ac.type for ac in obj.aircrafts.distinct("type").order_by("type").all()))
|
||||
|
||||
@action_with_form(AssignAircraftForm, description="Assign Aircraft Type")
|
||||
def assign_aircraft(self, request: HttpRequest, queryset: QuerySet[Instructor], data: Dict[str, List[AircraftTypes]]):
|
||||
i: int
|
||||
ac_types: List[str]
|
||||
i, ac_types = assign_aircraft(queryset=queryset, data=data)
|
||||
messages.success(request, f"{i} Instructors updated to {ac_types}")
|
||||
|
||||
@action_with_form(AssignMissionForm, description="Assign Mission Type")
|
||||
def assign_profile(self, request: HttpRequest, queryset: QuerySet[Instructor], data: Dict[str, List[MissionTypes]]):
|
||||
i: int
|
||||
mix_types: List[str]
|
||||
i, mix_types = assign_profile(queryset=queryset, data=data)
|
||||
messages.success(request, f"{i} Instructors updated to {mix_types}")
|
||||
Reference in New Issue
Block a user