Files
ProFi/outreach/models.py

96 lines
3.8 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 education.models import AcademicYear # Предполагается, что AcademicYear находится в приложении education
from employees.models import Employee # Предполагается, что модель Employee находится в приложении employees
## Профориентационная деятельность (название приложения: outreach)
class InstitutionType(models.Model):
name = models.CharField(max_length=50, 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 Representative(ContactMixin):
position = models.CharField(max_length=100, blank=True, null=True, verbose_name="Должность")
def __str__(self):
2025-05-18 22:48:39 +03:00
return f"{super().__str__()}"+(" - "+self.position if self.position else "")
2025-05-18 21:29:04 +03:00
class Meta:
verbose_name = "Представитель"
verbose_name_plural = "Представители"
2025-05-18 22:48:39 +03:00
ordering = ["position"]
2025-05-18 21:29:04 +03:00
class School(models.Model):
director = models.ForeignKey(
Representative, on_delete=models.SET_NULL, null=True, blank=True, verbose_name="Директор"
)
institution_type = models.ForeignKey(
InstitutionType, on_delete=models.CASCADE, verbose_name="Вид учебного заведения"
)
name = models.CharField(max_length=200, verbose_name="Название")
address = models.CharField(max_length=300, verbose_name="Адрес")
def __str__(self):
return f"{self.name} ({self.institution_type})"
class Meta:
verbose_name = "Школа"
verbose_name_plural = "Школы"
2025-05-18 22:48:39 +03:00
ordering = ["institution_type", "name", "address"]
2025-05-18 21:29:04 +03:00
class Partner(models.Model):
name = models.CharField(max_length=200, verbose_name="Название")
description = models.TextField(blank=True, null=True, 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 PartnerRepresentative(models.Model):
representative = models.OneToOneField(
Representative, on_delete=models.CASCADE, verbose_name="Представитель"
)
partner = models.ForeignKey(
Partner, on_delete=models.CASCADE, verbose_name="Партнер"
)
def __str__(self):
return f"{self.representative} - {self.partner}"
class Meta:
verbose_name = "Представитель партнера"
verbose_name_plural = "Представители партнеров"
unique_together = ("representative", "partner")
2025-05-18 22:48:39 +03:00
ordering = ["partner", "representative"]
2025-05-18 21:29:04 +03:00
class SchoolResponsibility(models.Model):
academic_year = models.ForeignKey(
AcademicYear, on_delete=models.CASCADE, verbose_name="Учебный год"
)
responsible = models.ForeignKey(
Employee, on_delete=models.CASCADE, verbose_name="Ответственный сотрудник"
)
school = models.ForeignKey(
School, on_delete=models.CASCADE, verbose_name="Школа"
)
def __str__(self):
return f"{self.responsible} - {self.school} ({self.academic_year})"
class Meta:
verbose_name = "Ответственный за школу"
verbose_name_plural = "Ответственные за школы"
2025-05-18 22:48:39 +03:00
ordering = ["academic_year", "responsible", "school"]