Instructor import
This commit is contained in:
@@ -60,7 +60,8 @@ class FlightSlotStaffSite(AdminSite):
|
|||||||
# Register only user visible models
|
# Register only user visible models
|
||||||
flightslot_staff = FlightSlotUserSite(name="staff_site")
|
flightslot_staff = FlightSlotUserSite(name="staff_site")
|
||||||
flightslot_staff.register(Availability, AvailabilityAdmin)
|
flightslot_staff.register(Availability, AvailabilityAdmin)
|
||||||
|
flightslot_staff.register(MissionProfile, MissionProfileAdmin)
|
||||||
|
flightslot_staff.register(Instructor, InstructorAdmin)
|
||||||
|
|
||||||
# Get version for debug purposes
|
# Get version for debug purposes
|
||||||
ver: str = environ.get("VERSION", "dev")
|
ver: str = environ.get("VERSION", "dev")
|
||||||
|
|||||||
@@ -6,6 +6,11 @@ from django.utils.safestring import SafeText
|
|||||||
|
|
||||||
from django_admin_action_forms import AdminActionFormsMixin, AdminActionForm, action_with_form
|
from django_admin_action_forms import AdminActionFormsMixin, AdminActionForm, action_with_form
|
||||||
|
|
||||||
|
from import_export import fields
|
||||||
|
from import_export.admin import ImportMixin
|
||||||
|
from import_export.tmp_storages import CacheStorage
|
||||||
|
from import_export.resources import ModelResource
|
||||||
|
|
||||||
from ..models.instructors import Instructor
|
from ..models.instructors import Instructor
|
||||||
from ..models.aircrafts import AircraftTypes
|
from ..models.aircrafts import AircraftTypes
|
||||||
from ..models.missions import MissionTypes
|
from ..models.missions import MissionTypes
|
||||||
@@ -15,6 +20,28 @@ from ..actions.assign_aircraft import assign_aircraft
|
|||||||
|
|
||||||
from typing import Dict, List
|
from typing import Dict, List
|
||||||
|
|
||||||
|
# Resource Class for Instructor data import
|
||||||
|
class InstructorResource(ModelResource):
|
||||||
|
surname = fields.Field(attribute="surname", column_name="surname")
|
||||||
|
name = fields.Field(attribute="name", column_name="name")
|
||||||
|
email = fields.Field(attribute="email", column_name="email")
|
||||||
|
phone = fields.Field(attribute="phone", column_name="phone")
|
||||||
|
|
||||||
|
# Cleanup fields before entering
|
||||||
|
def before_import_row(self, row: Dict[str, str], **kwargs) -> None:
|
||||||
|
row["name"] = SafeText("-".join(c.capitalize() for c in row["name"].split(" ")).strip())
|
||||||
|
row["surname"] = SafeText("-".join(c.capitalize() for c in row["surname"].split(" ")).strip())
|
||||||
|
row["phone"] = SafeText(row["phone"].replace(" ",""))
|
||||||
|
row["email"] = SafeText(row["email"].lower().strip())
|
||||||
|
return super().before_import_row(row, **kwargs)
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = Instructor
|
||||||
|
skip_unchanged = True
|
||||||
|
report_skipped = True
|
||||||
|
fields = ("surname", "name", "email", "phone", )
|
||||||
|
import_id_fields = ("surname", "name", )
|
||||||
|
|
||||||
# Form class to assing aircrafts to instructors
|
# Form class to assing aircrafts to instructors
|
||||||
class AssignMissionForm(AdminActionForm):
|
class AssignMissionForm(AdminActionForm):
|
||||||
mission_profiles = TypedMultipleChoiceField(choices=MissionTypes)
|
mission_profiles = TypedMultipleChoiceField(choices=MissionTypes)
|
||||||
@@ -23,12 +50,15 @@ class AssignMissionForm(AdminActionForm):
|
|||||||
class AssignAircraftForm(AdminActionForm):
|
class AssignAircraftForm(AdminActionForm):
|
||||||
aircrafts = TypedMultipleChoiceField(choices=AircraftTypes)
|
aircrafts = TypedMultipleChoiceField(choices=AircraftTypes)
|
||||||
|
|
||||||
class InstructorAdmin(AdminActionFormsMixin, admin.ModelAdmin):
|
class InstructorAdmin(ImportMixin, AdminActionFormsMixin, admin.ModelAdmin):
|
||||||
model = Instructor
|
model = Instructor
|
||||||
list_display = ("surname", "name", "email", "phone", "assigned_profiles", "assigned_aircrafts", "active", )
|
list_display = ("surname", "name", "email", "phone", "assigned_profiles", "assigned_aircrafts", "active", )
|
||||||
search_fields = ("surname", "name", "phone", "email", )
|
search_fields = ("surname", "name", "phone", "email", )
|
||||||
readonly_fields = ("username", "password", )
|
readonly_fields = ("username", "password", )
|
||||||
actions = ("assign_aircraft", "assign_profile", )
|
actions = ("assign_aircraft", "assign_profile", )
|
||||||
|
resource_classes = [InstructorResource]
|
||||||
|
tmp_storage_class = CacheStorage
|
||||||
|
skip_admin_log = True
|
||||||
|
|
||||||
@admin.display(description="Password")
|
@admin.display(description="Password")
|
||||||
def password(self, obj: Instructor) -> SafeText:
|
def password(self, obj: Instructor) -> SafeText:
|
||||||
|
|||||||
Reference in New Issue
Block a user