130 lines
4.0 KiB
Python
130 lines
4.0 KiB
Python
from django.db import models
|
|
from core.models import ContactMixin # Предполагается, что ContactMixin находится в приложении core
|
|
from employees.models import Employee # Предполагается, что модель Employee находится в приложении employees
|
|
from users.models import Account # Предполагается, что модель Account находится в приложении users
|
|
|
|
## Учебный процесс (название приложения: education)
|
|
|
|
class AcademicYear(models.Model):
|
|
year = models.CharField(max_length=9, verbose_name="Год") # Например, "2023-2024"
|
|
|
|
def __str__(self):
|
|
return self.year
|
|
|
|
class Meta:
|
|
verbose_name = "Учебный год"
|
|
verbose_name_plural = "Учебные годы"
|
|
|
|
|
|
class Department(models.Model):
|
|
name = models.CharField(max_length=100, verbose_name="Название отделения")
|
|
|
|
def __str__(self):
|
|
return self.name
|
|
|
|
class Meta:
|
|
verbose_name = "Учебное отделение"
|
|
verbose_name_plural = "Учебные отделения"
|
|
|
|
|
|
class DepartmentHead(models.Model):
|
|
department = models.ForeignKey(
|
|
Department, on_delete=models.CASCADE, verbose_name="Учебное отделение"
|
|
)
|
|
head = models.OneToOneField(
|
|
Employee, on_delete=models.CASCADE, verbose_name="Руководитель"
|
|
)
|
|
|
|
def __str__(self):
|
|
return f"{self.head} - {self.department}"
|
|
|
|
class Meta:
|
|
verbose_name = "Руководитель отделения"
|
|
verbose_name_plural = "Руководители отделений"
|
|
unique_together = ("department", "head")
|
|
|
|
|
|
class Specialty(models.Model):
|
|
name = models.CharField(max_length=200, verbose_name="Название специальности")
|
|
code = models.CharField(max_length=20, verbose_name="Код специальности")
|
|
department = models.ForeignKey(
|
|
Department, on_delete=models.CASCADE, verbose_name="Учебное отделение"
|
|
)
|
|
|
|
def __str__(self):
|
|
return f"{self.code} - {self.name}"
|
|
|
|
class Meta:
|
|
verbose_name = "Специальность"
|
|
verbose_name_plural = "Специальности"
|
|
|
|
|
|
class Group(models.Model):
|
|
name = models.CharField(max_length=20, verbose_name="Название группы")
|
|
curator = models.ForeignKey(
|
|
Employee, on_delete=models.SET_NULL, null=True, blank=True, verbose_name="Куратор"
|
|
)
|
|
specialty = models.ForeignKey(
|
|
Specialty, on_delete=models.CASCADE, verbose_name="Специальность"
|
|
)
|
|
|
|
def __str__(self):
|
|
return self.name
|
|
|
|
class Meta:
|
|
verbose_name = "Группа"
|
|
verbose_name_plural = "Группы"
|
|
|
|
|
|
class Student(models.Model):
|
|
group = models.ForeignKey(
|
|
Group, on_delete=models.CASCADE, verbose_name="Группа"
|
|
)
|
|
account = models.OneToOneField(
|
|
Account, on_delete=models.CASCADE, unique=True, verbose_name="Аккаунт"
|
|
)
|
|
|
|
@property
|
|
def first_name(self):
|
|
return self.account.first_name
|
|
@first_name.setter
|
|
def first_name(self, value):
|
|
self.account.first_name = value
|
|
|
|
@property
|
|
def last_name(self):
|
|
return self.account.last_name
|
|
@last_name.setter
|
|
def last_name(self, value):
|
|
self.account.last_name = value
|
|
|
|
@property
|
|
def middle_name(self):
|
|
return self.account.middle_name
|
|
@middle_name.setter
|
|
def middle_name(self, value):
|
|
self.account.middle_name = value
|
|
|
|
@property
|
|
def phone(self):
|
|
return self.account.phone
|
|
@phone.setter
|
|
def phone(self, value):
|
|
self.account.phone = value
|
|
|
|
@property
|
|
def email(self):
|
|
return self.account.email
|
|
@email.setter
|
|
def email(self, value):
|
|
self.account.email = value
|
|
|
|
|
|
def __str__(self):
|
|
return f"{self.last_name} {self.first_name} - {self.group}"
|
|
|
|
class Meta:
|
|
verbose_name = "Студент"
|
|
verbose_name_plural = "Студенты"
|
|
|