3 # Copyright (C) 2012 FinalsClub Foundation
6 Models for the courses django app.
7 Handles courses, and their related models
8 Courses are the first class object, they contain notes.
9 Courses have a manytoone relation to schools.
13 from django.db import models
14 from django.template import defaultfilters
16 class School(models.Model):
17 """ A grouping that contains many courses """
18 name = models.CharField(max_length=255)
19 slug = models.SlugField(null=True)
20 location = models.CharField(max_length=255, blank=True, null=True)
21 url = models.URLField(max_length=511, blank=True)
22 # Facebook keeps a unique identifier for all schools
23 facebook_id = models.BigIntegerField(blank=True, null=True)
26 def __unicode__(self):
30 def save(self, *args, **kwargs):
31 """ Save school and generate a slug if one doesn't exist """
33 self.slug = defaultfilters.slugify(self.name)
34 super(School, self).save(*args, **kwargs)
37 class Course(models.Model):
38 """ First class object that contains many notes.Note objects """
40 name = models.CharField(max_length=255)
41 slug = models.SlugField(null=True)
42 school = models.ForeignKey(School) # Should this be optional ever?
43 file_count = models.IntegerField(default=0)
45 desc = models.TextField(max_length=511, blank=True, null=True)
46 url = models.URLField(max_length=511, blank=True, null=True)
47 academic_year = models.IntegerField(blank=True, null=True,
48 default=datetime.datetime.now().year)
50 instructor_name = models.CharField(max_length=255, blank=True, null=True)
51 instructor_email = models.EmailField(blank=True, null=True)
53 updated_at = models.DateTimeField(default=datetime.datetime.utcnow)
55 created_at = models.DateTimeField(auto_now_add=True)
59 ordering = ['-file_count', 'school', 'name']
62 def __unicode__(self):
63 return u"{0}: {1}".format(self.name, self.school)
66 def get_absolute_url(self):
67 """ Not implemented yet """
68 return u"/{0}/{1}".format(self.school.slug, self.slug)
71 def save(self, *args, **kwargs):
72 """ Save school and generate a slug if one doesn't exist """
74 self.slug = defaultfilters.slugify(self.name)
75 super(Course, self).save(*args, **kwargs)
78 def update_note_count(self):
79 self.file_count = self.note_set.count()