For complete model documentation with all fields and methods, see the API Reference section.
Core Models Overview
ESP Website uses Django’s ORM with several key patterns. Here’s a visual overview:User Models
ESPUser
Location:esp/esp/users/models/__init__.py
Purpose: Extended user model for students, teachers, and administrators.
Key Features:
- Proxy model over Django’s
User(adds methods, not fields) - Type checking:
isStudent(),isTeacher(),isAdministrator() - Grade management:
getGrade(),getYOG(),set_grade() - Class queries:
getEnrolledClasses(),getTaughtClasses()
Related Models
Related Models
Group
Location:django.contrib.auth.models.Group
Purpose: User type categorization (Student, Teacher, Administrator, etc.).
Permission
Location:esp/esp/users/models/__init__.py
Purpose: Fine-grained access control for program administration.
V/Administer- Full program administrationV/Administer/Edit- Edit program settingsV/Flags/UserRole/Student- Student roleV/Flags/UserRole/Teacher- Teacher role
Program Models
Program
Location:esp/esp/program/models/__init__.py
Purpose: Represents an instance of a program (e.g., “Splash Fall 2024”).
Key Fields:
url- URL identifier (e.g., “Splash”)name- Full name (e.g., “Splash”)grade_min,grade_max- Grade restrictionsprogram_size_max- Capacity limitdirector_email- Program contact
students()- Get all registered studentsteachers()- Get all teachersgetTimeSlots()- Get all time blocksget_learn_url()- Student registration URLget_teach_url()- Teacher registration URL
ClassSubject
Location:esp/esp/program/models/class_.py
Purpose: Represents a class offering (e.g., “H9876: Introduction to Robotics”).
Key Fields:
title- Class titleclass_info- Descriptioncategory- Subject categorygrade_min,grade_max- Grade restrictionsclass_size_max- Maximum studentsduration- Length in minutesstatus- Approval status (Unreviewed, Accepted, etc.)
emailcode()- Email ID (e.g., “H9876”)teachers()- Get teaching teamsections- Related ClassSection objectsnum_students()- Total enrolled students
ClassSection
Location:esp/esp/program/models/class_.py
Purpose: A scheduled instance of a class (e.g., “H9876s1” on Saturday 10-11am in Room 123).
Key Fields:
parent_class- Related ClassSubjectduration- Override class duration (optional)max_class_capacity- Override capacity (optional)meeting_times- Related Event objects (time blocks)enrolled_students- Count of enrolled students
start_time()- Start datetimeend_time()- End datetimestudents()- Enrolled studentsnum_students()- Enrollment countisFull()- Check if at capacitycannotAdd(student)- Check eligibility
Registration Models
StudentRegistration
Location:esp/esp/program/models/__init__.py
Purpose: Tracks a student’s registration for a class section.
Key Fields:
section- ClassSection being registered foruser- ESPUser (student)relationship- RegistrationType (Enrolled, Interested, Priority, etc.)start_date,end_date- ExpirableModel fields
Enrolled- Student is enrolledAttended- Student attended the classInterested- Student marked interest (lottery)Priority/1,Priority/2, etc. - Priority levels (two-phase lottery)
StudentSubjectInterest
Location:esp/esp/program/models/__init__.py
Purpose: Tracks student interest in a ClassSubject (for two-phase lottery).
RegistrationProfile
Location:esp/esp/program/models/__init__.py
Purpose: Profile information submitted for a specific program.
Key Fields:
user- ESPUserprogram- Programstudent_info- JSON field with custom datacontact_user,contact_guardian,contact_emergency- ContactInfo references
Calendar Models
Event
Location:esp/esp/cal/models.py
Purpose: Represents a time block (or other timed event like teacher training).
Key Fields:
program- Associated programevent_type- EventType (Class Time, Lunch, etc.)start,end- Datetime rangeshort_description- Display name
Resource Models
Resource
Location:esp/esp/resources/models.py
Purpose: Represents a classroom or equipment item.
Key Fields:
name- Resource name (e.g., “Room 123”)res_type- ResourceType (Classroom, Projector, etc.)num_students- Capacity (for classrooms)event- Associated time blockis_unique- Whether resource can be shared
ResourceType
Purpose: Categories of resources. Common Types:- Classroom
- Projector
- Whiteboard
- Computer
- AV Equipment
ResourceRequest
Purpose: Tracks resources requested by a class.ResourceAssignment
Purpose: Tracks which resources are assigned to which sections.Financial Models
LineItemType
Location:esp/esp/accounting/models.py
Purpose: Type of payment (e.g., “Program Fee”, “Saturday Lunch”).
Key Fields:
text- Display nameamount_dec- Priceprogram- Associated programrequired- Whether purchase is required
Configuration Models
Tag
Location:esp/esp/tagdict/models.py
Purpose: Key-value configuration, optionally scoped to a program or other object.
Key Fields:
key- Tag namevalue- Tag value (string)content_type,object_id- Optional scope (GenericForeignKey)
Common Patterns
ExpirableModel Pattern
Many models inherit fromExpirableModel to track historical data:
StudentRegistrationPermissionRecordStudentSubjectInterest
Manager Methods
Many models define custom manager methods:Related Object Queries
Model Relationships Diagram
Database Queries
Common Query Patterns
Get all students enrolled in a program
Get all students enrolled in a program
Get all classes a student is enrolled in
Get all classes a student is enrolled in
Get all approved classes in a program
Get all approved classes in a program
Check if a classroom is available
Check if a classroom is available
Next Steps
Program Model API
Complete Program model reference
Class Models API
ClassSubject and ClassSection details
User Model API
ESPUser and related models
Registration API
StudentRegistration details