models
This commit is contained in:
133
events/models.py
Normal file
133
events/models.py
Normal file
@@ -0,0 +1,133 @@
|
||||
from django.db import models
|
||||
from education.models import AcademicYear, Specialty, Student # Предполагается, что модели находятся в приложении education
|
||||
from employees.models import Employee # Предполагается, что модель Employee находится в приложении employees
|
||||
|
||||
## Учет мероприятий (название приложения: events)
|
||||
|
||||
class EventStatus(models.Model):
|
||||
name = models.CharField(max_length=100, verbose_name="Название статуса")
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
||||
class Meta:
|
||||
verbose_name = "Статус проведения"
|
||||
verbose_name_plural = "Статусы проведения"
|
||||
|
||||
|
||||
class ActivityType(models.Model):
|
||||
name = models.CharField(max_length=100, verbose_name="Название вида деятельности")
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
||||
class Meta:
|
||||
verbose_name = "Деятельность мероприятия"
|
||||
verbose_name_plural = "Деятельности мероприятий"
|
||||
|
||||
|
||||
class Event(models.Model):
|
||||
academic_year = models.ForeignKey(
|
||||
AcademicYear, on_delete=models.CASCADE, verbose_name="Учебный год"
|
||||
)
|
||||
status = models.ForeignKey(
|
||||
EventStatus, on_delete=models.SET_NULL, null=True, blank=True, verbose_name="Статус мероприятия"
|
||||
)
|
||||
name = models.CharField(max_length=200, verbose_name="Название")
|
||||
location = models.CharField(max_length=255, blank=True, null=True, verbose_name="Место проведения")
|
||||
date = models.DateField(verbose_name="Дата проведения")
|
||||
description = models.TextField(blank=True, null=True, verbose_name="Описание")
|
||||
|
||||
def __str__(self):
|
||||
return f"{self.name} ({self.date})"
|
||||
|
||||
class Meta:
|
||||
verbose_name = "Мероприятие"
|
||||
verbose_name_plural = "Мероприятия"
|
||||
|
||||
|
||||
class EventOrganizer(models.Model):
|
||||
employee = models.ForeignKey(
|
||||
Employee, on_delete=models.CASCADE, verbose_name="Сотрудник-организатор"
|
||||
)
|
||||
event = models.ForeignKey(
|
||||
Event, on_delete=models.CASCADE, verbose_name="Мероприятие"
|
||||
)
|
||||
|
||||
def __str__(self):
|
||||
return f"{self.employee} - {self.event}"
|
||||
|
||||
class Meta:
|
||||
verbose_name = "Организатор мероприятия"
|
||||
verbose_name_plural = "Организаторы мероприятий"
|
||||
unique_together = ("employee", "event")
|
||||
|
||||
|
||||
class EventDetail(models.Model):
|
||||
activity_type = models.ForeignKey(
|
||||
ActivityType, on_delete=models.CASCADE, verbose_name="Вид деятельности"
|
||||
)
|
||||
event = models.ForeignKey(
|
||||
Event, on_delete=models.CASCADE, verbose_name="Мероприятие"
|
||||
)
|
||||
|
||||
def __str__(self):
|
||||
return f"{self.activity_type} - {self.event}"
|
||||
|
||||
class Meta:
|
||||
verbose_name = "Деталь мероприятия"
|
||||
verbose_name_plural = "Детали мероприятий"
|
||||
unique_together = ("activity_type", "event")
|
||||
|
||||
|
||||
class EventParticipant(models.Model):
|
||||
student = models.ForeignKey(
|
||||
Student, on_delete=models.CASCADE, verbose_name="Студент"
|
||||
)
|
||||
event = models.ForeignKey(
|
||||
Event, on_delete=models.CASCADE, verbose_name="Мероприятие"
|
||||
)
|
||||
points = models.PositiveIntegerField(blank=True, default=0, verbose_name="Баллы за участие")
|
||||
|
||||
def __str__(self):
|
||||
return f"{self.student} - {self.event}"
|
||||
|
||||
class Meta:
|
||||
verbose_name = "Участник мероприятия"
|
||||
verbose_name_plural = "Участники мероприятий"
|
||||
|
||||
|
||||
class MethodicalFile(models.Model):
|
||||
specialty = models.ForeignKey(
|
||||
Specialty, on_delete=models.CASCADE, verbose_name="Специальность"
|
||||
)
|
||||
name = models.CharField(max_length=200, verbose_name="Название")
|
||||
file_path = models.FileField(max_length=500, verbose_name="Файл")
|
||||
upload_date = models.DateField(auto_now_add=True, verbose_name="Дата добавления")
|
||||
employee = models.ForeignKey(
|
||||
Employee, on_delete=models.SET_NULL, null=True, blank=True, verbose_name="Сотрудник"
|
||||
)
|
||||
|
||||
def __str__(self):
|
||||
return f"{self.name} ({self.specialty})"
|
||||
|
||||
class Meta:
|
||||
verbose_name = "Методический файл"
|
||||
verbose_name_plural = "Методические файлы"
|
||||
|
||||
|
||||
class RelevantMethodicalFile(models.Model):
|
||||
methodical_file = models.ForeignKey(
|
||||
MethodicalFile, on_delete=models.CASCADE, verbose_name="Методический файл"
|
||||
)
|
||||
activity_type = models.ForeignKey(
|
||||
ActivityType, on_delete=models.CASCADE, verbose_name="Вид деятельности"
|
||||
)
|
||||
|
||||
def __str__(self):
|
||||
return f"{self.methodical_file} - {self.activity_type}"
|
||||
|
||||
class Meta:
|
||||
verbose_name = "Релевантный методический файл"
|
||||
verbose_name_plural = "Релевантные методические файлы"
|
||||
|
||||
Reference in New Issue
Block a user