Advertisement
Guest User

Untitled

a guest
Feb 23rd, 2018
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.42 KB | None | 0 0
  1. from django.core.validators import MaxValueValidator
  2. from django.template.defaultfilters import slugify
  3. from django.core.validators import RegexValidator
  4. from django.contrib.auth.models import User
  5. from django.db import models
  6. from django.contrib.auth.models import AbstractUser
  7.  
  8.  
  9. class Faculty(models.Model):
  10. name = models.CharField(max_length=50)
  11. slug = models.SlugField(max_length=140, unique=False, default=None, null=True, blank=True)
  12.  
  13. class Meta:
  14. verbose_name_plural = 'Faculties'
  15.  
  16. def __str__(self):
  17. return self.name
  18.  
  19.  
  20. class Department(models.Model):
  21. faculty = models.ForeignKey('Faculty', on_delete=models.CASCADE)
  22. name = models.CharField(max_length=50)
  23.  
  24. def __str__(self):
  25. return self.name
  26.  
  27.  
  28. class StudyProgramme(models.Model):
  29. department = models.ForeignKey('Department', on_delete=models.CASCADE)
  30. name = models.CharField(max_length=50)
  31. studies_type = models.IntegerField(choices=((0, "Bachelor Studies"),
  32. (1, "Master Studies"),
  33. (2, "Doctoral Studies"),
  34. (3, "Integrated Studies")), default=0)
  35. duration = models.PositiveSmallIntegerField(validators=[MaxValueValidator(99)])
  36. slug = models.SlugField(max_length=140, unique=False, default=None, null=True, blank=True)
  37.  
  38. class Meta:
  39. verbose_name = "Study Programme"
  40. verbose_name_plural = 'Study Programmes'
  41.  
  42. def __str__(self):
  43. return self.name
  44.  
  45.  
  46. class Course(models.Model):
  47. study_programme = models.ForeignKey('StudyProgramme', on_delete=models.CASCADE, default='')
  48. name = models.CharField(max_length=50, unique=True)
  49. ects = models.PositiveSmallIntegerField(validators=[MaxValueValidator(99)])
  50. description = models.TextField()
  51. year = models.PositiveSmallIntegerField(validators=[MaxValueValidator(99)])
  52. semester = models.IntegerField(choices=((1, "1"),
  53. (2, "2"),
  54. ), default=None)
  55. teacher1 = models.ForeignKey('TeacherData', on_delete=models.CASCADE, default=None,
  56. verbose_name="Course Teacher", related_name='%(class)s_course_teacher')
  57. teacher2 = models.ForeignKey('TeacherData', on_delete=models.CASCADE, default=None, null=True,
  58. verbose_name="Seminar Teacher", related_name='%(class)s_seminar_teacher')
  59. slug = models.SlugField(max_length=140, unique=True)
  60.  
  61. def __str__(self):
  62. return self.name
  63.  
  64. def _get_unique_slug(self):
  65. slug = slugify(self.name)
  66. unique_slug = slug
  67. num = 1
  68. while Course.objects.filter(slug=unique_slug).exists():
  69. unique_slug = '{}-{}'.format(slug, num)
  70. num += 1
  71. return unique_slug
  72.  
  73. def save(self, *args, **kwargs):
  74. if not self.slug:
  75. self.slug = self._get_unique_slug()
  76. super().save()
  77.  
  78.  
  79. class Lecture(models.Model):
  80. LECTURE_CHOICES = (
  81. ('Courses', 'Courses'),
  82. ('Seminars', 'Seminars'),
  83. )
  84. course = models.ForeignKey('Course', on_delete=models.CASCADE, default='', related_name='lectures',)
  85. lecture_category = models.CharField(max_length=10, choices=LECTURE_CHOICES, default='Courses',)
  86. lecture_title = models.CharField(max_length=100, blank=True, null=True)
  87. content = models.TextField(blank=False, default=None)
  88.  
  89. def __str__(self):
  90. return str(self.lecture_title)
  91.  
  92.  
  93. class FileUpload(models.Model):
  94. files = models.FileField(upload_to='documents', null=True, blank=True)
  95. lecture = models.ForeignKey('Lecture', related_name='files', on_delete=None, default=None)
  96.  
  97. def __str__(self):
  98. return str(self.files)
  99.  
  100. def file_link(self):
  101. if self.files:
  102. return "<a href='%s'>download</a>" % (self.files.url,)
  103. else:
  104. return "No attachment"
  105.  
  106. file_link.allow_tags = True
  107. file_link.short_description = 'File Download'
  108.  
  109.  
  110. class User(AbstractUser):
  111. is_student = models.BooleanField(default=False)
  112. is_teacher = models.BooleanField(default=False)
  113.  
  114.  
  115. class Student(models.Model):
  116. user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True)
  117. name = models.CharField(max_length=30, null=True, blank=True, default=None)
  118. surname = models.CharField(max_length=50, null=True, blank=True, default=None)
  119. email = models.EmailField(unique=True, null=True, blank=True, default=None)
  120. student_ID = models.CharField(unique=True, max_length=14,
  121. validators=[RegexValidator(regex='^.{14}$',
  122. message='The ID needs to be 14 characters long.')],
  123. null=True, blank=True, default=None)
  124. photo = models.ImageField(upload_to='students_images', null=True, blank=True, default=None)
  125. phone = models.CharField(max_length=15, null=True, blank=True, default=None,
  126. validators=[RegexValidator(regex='^[a-zA-Z0-9+]+$',
  127. message='Not a valid phone number.')], )
  128.  
  129. def __str__(self):
  130. return self.surname
  131.  
  132.  
  133. class Teacher(models.Model):
  134. user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True)
  135. name = models.CharField(max_length=30, null=True, blank=True, default=None)
  136. surname = models.CharField(max_length=50, null=True, blank=True, default=None)
  137. email = models.EmailField(unique=True, null=True, blank=True, default=None)
  138. teacher_ID = models.CharField(unique=True, max_length=14,
  139. validators=[RegexValidator(regex='^.{14}$',
  140. message='The ID needs to be 14 characters long.')],
  141. null=True, blank=True, default=None)
  142. academic_title = models.CharField(max_length=30, null=True, blank=True, default=None)
  143. biography = models.TextField(null=True, blank=True, default=None)
  144. website = models.URLField(help_text="E.g.: https://www.example.com", null=True, blank=True, default=None)
  145. photo = models.ImageField(upload_to='students_images', null=True, blank=True, default=None)
  146. phone = models.CharField(max_length=15, null=True, blank=True, default=None)
  147.  
  148. def __str__(self):
  149. return self.surname
  150.  
  151.  
  152. class StudentData(models.Model):
  153. name = models.CharField(max_length=30)
  154. surname = models.CharField(max_length=50)
  155. student_ID = models.CharField(unique=True, max_length=14)
  156. notes = models.CharField(max_length=255, default=None, blank=True)
  157.  
  158. class Meta:
  159. verbose_name = "Student Data"
  160. verbose_name_plural = "Students Data"
  161.  
  162. def __str__(self):
  163. return self.surname
  164.  
  165.  
  166. class TeacherData(models.Model):
  167. name = models.CharField(max_length=30)
  168. surname = models.CharField(max_length=50)
  169. teacher_ID = models.CharField(unique=True, max_length=14)
  170. notes = models.CharField(max_length=255, default=None, blank=True)
  171.  
  172. class Meta:
  173. verbose_name = "Teacher Data"
  174. verbose_name_plural = "Teachers Data"
  175.  
  176. def __str__(self):
  177. return self.surname
  178.  
  179.  
  180. User.student = property(lambda p: Student.objects.get_or_create(user=p)[0])
  181. User.teacher = property(lambda p: Teacher.objects.get_or_create(user=p)[0])
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement