models
This commit is contained in:
93
education/models.py
Normal file
93
education/models.py
Normal file
@@ -0,0 +1,93 @@
|
||||
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 = "Студенты"
|
||||
|
||||
Reference in New Issue
Block a user