Files
ProFi/education/models.py
2025-05-18 21:29:04 +03:00

94 lines
3.2 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(ContactMixin):
group = models.ForeignKey(
Group, on_delete=models.CASCADE, verbose_name="Группа"
)
account = models.OneToOneField(
Account, on_delete=models.CASCADE, unique=True, verbose_name="Аккаунт"
)
def __str__(self):
return f"{self.last_name} {self.first_name} - {self.group}"
class Meta:
verbose_name = "Студент"
verbose_name_plural = "Студенты"