import uuid
from django.db import models
[docs]class CommonModel(models.Model):
"""
Abstract :py:class:`~django.db.models.Model` with common fields for all "real" Models
"""
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False,
help_text='globally unique id (UUID4)')
effective_start_date = models.DateField(default=None, blank=True, null=True,
help_text='date when this model instance becomes valid')
effective_end_date = models.DateField(default=None, blank=True, null=True,
help_text='date when this model instance becomes invalid')
last_mod_user_name = models.CharField(default=None, null=True, max_length=80,
help_text='who last modified this instance')
last_mod_date = models.DateField(auto_now=True,
help_text='when they modified it.')
class Meta:
abstract = True
[docs]class Course(CommonModel):
"""
A course of instruction. e.g. COMSW1002 Computing in Context
"""
school_bulletin_prefix_code = models.CharField(max_length=10)
suffix_two = models.CharField(max_length=2)
subject_area_code = models.CharField(max_length=10)
course_number = models.CharField(max_length=10)
course_identifier = models.CharField(max_length=10, unique=True)
course_name = models.CharField(max_length=80)
course_description = models.TextField()
class Meta:
ordering = ["course_number"]
def __str__(self):
return '%s,%s,%s,%s' % (
self.id,
self.course_number,
self.course_identifier,
self.course_name
)
[docs]class CourseTerm(CommonModel):
"""
A specific course term (year+semester) instance.
e.g. 20183COMSW1002
"""
term_identifier = models.CharField(max_length=14, unique=True)
audit_permitted_code = models.PositiveIntegerField(blank=True, default=0)
exam_credit_flag = models.BooleanField(default=True)
course = models.ForeignKey('myapp.Course', related_name='course_terms', on_delete=models.CASCADE, null=True,
default=None)
class Meta:
ordering = ["term_identifier"]
def __str__(self):
return '%s,%s,%s' % (self.id, self.term_identifier, self.course.course_identifier)
[docs]class Person(CommonModel):
"""
A person.
"""
# 'name' is a reserved word in SQL server so just force the db_column name to be different.
# TODO: This might be a django-pyodbc-azure bug. Check it.
name = models.CharField(max_length=100, unique=True)
class Meta:
ordering = ['name']
verbose_name_plural = 'people'
def __str__(self):
return '%s,%s' % (self.id, self.name)
[docs]class Instructor(CommonModel):
"""
An instructor.
"""
person = models.OneToOneField('myapp.Person', related_name='instructor', on_delete=models.CASCADE, null=True,
default=None)
course_terms = models.ManyToManyField('myapp.CourseTerm', related_name='instructors')
class Meta:
ordering = ['id']
def __str__(self):
return '%s' % (self.id)