Files
ProFi/education/models.py

136 lines
4.3 KiB
Python
Raw Permalink Normal View History

2025-05-18 21:29:04 +03:00
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 = "Учебные годы"
2025-05-18 22:48:39 +03:00
ordering = ['-year']
2025-05-18 21:29:04 +03:00
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 = "Учебные отделения"
2025-05-18 22:48:39 +03:00
ordering = ["name"]
2025-05-18 21:29:04 +03:00
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")
2025-05-18 22:48:39 +03:00
ordering = ["department", "head"]
2025-05-18 21:29:04 +03:00
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 = "Специальности"
2025-05-18 22:48:39 +03:00
ordering = ["code"]
2025-05-18 21:29:04 +03:00
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:
2025-05-18 22:48:39 +03:00
verbose_name = "Студенческая группа"
verbose_name_plural = "Студенческие группы"
ordering = ["name", "specialty"]
2025-05-18 21:29:04 +03:00
2025-05-18 22:16:31 +03:00
class Student(models.Model):
2025-05-18 21:29:04 +03:00
group = models.ForeignKey(
Group, on_delete=models.CASCADE, verbose_name="Группа"
)
account = models.OneToOneField(
Account, on_delete=models.CASCADE, unique=True, verbose_name="Аккаунт"
)
2025-05-18 22:16:31 +03:00
@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
2025-05-18 21:29:04 +03:00
def __str__(self):
return f"{self.last_name} {self.first_name} - {self.group}"
class Meta:
verbose_name = "Студент"
verbose_name_plural = "Студенты"
2025-05-18 22:48:39 +03:00
ordering = ["group", "account"]
2025-05-18 21:29:04 +03:00