adding links from the course_list template to the course_detail page
[oweals/karmaworld.git] / karmaworld / apps / courses / models.py
1 #!/usr/bin/env python
2 # -*- coding:utf8 -*-
3 # Copyright (C) 2012  FinalsClub Foundation
4
5 """
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.
10 """
11 import datetime
12
13 from django.db import models
14 from django.template import defaultfilters
15
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)
24
25
26     def __unicode__(self):
27         return self.name
28
29
30     def save(self, *args, **kwargs):
31         """ Save school and generate a slug if one doesn't exist """
32         if not self.slug:
33             self.slug = defaultfilters.slugify(self.name)
34         super(School, self).save(*args, **kwargs)
35
36
37 class Course(models.Model):
38     """ First class object that contains many notes.Note objects """
39     # Core metadata
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)
44
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)
49
50     instructor_name     = models.CharField(max_length=255, blank=True, null=True)
51     instructor_email    = models.EmailField(blank=True, null=True)
52
53     updated_at      = models.DateTimeField(default=datetime.datetime.utcnow)
54
55     created_at      = models.DateTimeField(auto_now_add=True)
56
57
58     class Meta:
59         ordering = ['-file_count', 'school', 'name']
60
61
62     def __unicode__(self):
63         return u"{0}: {1}".format(self.name, self.school)
64
65
66     def get_absolute_url(self):
67         """ Not implemented yet """
68         return u"/{0}/{1}".format(self.school.slug, self.slug)
69
70
71     def save(self, *args, **kwargs):
72         """ Save school and generate a slug if one doesn't exist """
73         if not self.slug:
74             self.slug = defaultfilters.slugify(self.name)
75         super(Course, self).save(*args, **kwargs)
76
77
78     def update_note_count(self):
79         self.file_count = self.note_set.count()
80         self.save()