2025-05-18 21:29:04 +03:00
|
|
|
from django.db import models
|
|
|
|
|
|
2025-05-18 23:05:48 +03:00
|
|
|
|
2025-05-18 21:29:04 +03:00
|
|
|
## Модуль Анкетирование (название приложения: surveys)
|
|
|
|
|
|
|
|
|
|
class Survey(models.Model):
|
|
|
|
|
title = models.CharField(max_length=70, verbose_name="Название опроса")
|
|
|
|
|
|
|
|
|
|
def __str__(self):
|
|
|
|
|
return self.title
|
|
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
|
verbose_name = "Опрос"
|
|
|
|
|
verbose_name_plural = "Опросы"
|
2025-05-18 23:05:48 +03:00
|
|
|
ordering = ["title"]
|
2025-05-18 21:29:04 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
class ScoreVariable(models.Model):
|
|
|
|
|
name = models.CharField(max_length=30, verbose_name="Имя переменной")
|
|
|
|
|
title = models.CharField(max_length=70, verbose_name="Название переменной")
|
|
|
|
|
description = models.TextField(verbose_name="Описание")
|
|
|
|
|
survey = models.ForeignKey(
|
|
|
|
|
Survey, on_delete=models.CASCADE, verbose_name="Опрос"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
def __str__(self):
|
|
|
|
|
return f"{self.title} ({self.survey})"
|
|
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
|
verbose_name = "Переменная оценки"
|
|
|
|
|
verbose_name_plural = "Переменные оценки"
|
2025-05-18 23:05:48 +03:00
|
|
|
ordering = ["survey", "name", "title"]
|
2025-05-18 21:29:04 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
class Statement(models.Model):
|
|
|
|
|
statement = models.CharField(max_length=256, verbose_name="Утверждение")
|
|
|
|
|
score_variable = models.ForeignKey(
|
|
|
|
|
ScoreVariable, on_delete=models.SET_NULL, blank=True, null=True, verbose_name="Переменная оценки"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
def __str__(self):
|
|
|
|
|
return self.statement
|
|
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
|
verbose_name = "Утверждение"
|
|
|
|
|
verbose_name_plural = "Утверждения"
|
2025-05-18 23:05:48 +03:00
|
|
|
ordering = ["statement", "score_variable"]
|
2025-05-18 21:29:04 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
class QuestionPair(models.Model):
|
|
|
|
|
survey = models.ForeignKey(
|
|
|
|
|
Survey, on_delete=models.CASCADE, verbose_name="Опрос"
|
|
|
|
|
)
|
|
|
|
|
statement_a = models.OneToOneField(
|
|
|
|
|
Statement, on_delete=models.CASCADE, related_name="pair_a", verbose_name="Утверждение A"
|
|
|
|
|
)
|
|
|
|
|
statement_b = models.OneToOneField(
|
|
|
|
|
Statement, on_delete=models.CASCADE, related_name="pair_b", verbose_name="Утверждение B"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
def __str__(self):
|
|
|
|
|
return f"Пара: {self.statement_a} - {self.statement_b}"
|
|
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
|
verbose_name = "Пара вопросов"
|
|
|
|
|
verbose_name_plural = "Пары вопросов"
|
2025-05-18 23:05:48 +03:00
|
|
|
ordering = ["survey", "statement_a", "statement_b"]
|
2025-05-18 21:29:04 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
class AgreementQuestion(models.Model):
|
|
|
|
|
survey = models.ForeignKey(
|
|
|
|
|
Survey, on_delete=models.CASCADE, verbose_name="Опрос"
|
|
|
|
|
)
|
|
|
|
|
question = models.CharField(max_length=256, verbose_name="Вопрос")
|
|
|
|
|
score_variable = models.ForeignKey(
|
|
|
|
|
ScoreVariable, on_delete=models.CASCADE, verbose_name="Переменная оценки"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
def __str__(self):
|
|
|
|
|
return self.question
|
|
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
|
verbose_name = "Вопрос на согласие"
|
|
|
|
|
verbose_name_plural = "Вопросы на согласие"
|
2025-05-18 23:05:48 +03:00
|
|
|
ordering = ["survey", "question"]
|
2025-05-18 21:29:04 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
class EducationalInstitution(models.Model):
|
|
|
|
|
name = models.CharField(max_length=256, verbose_name="Название учреждения")
|
|
|
|
|
|
|
|
|
|
def __str__(self):
|
|
|
|
|
return self.name
|
|
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
|
verbose_name = "Образовательное учреждение"
|
|
|
|
|
verbose_name_plural = "Образовательные учреждения"
|
2025-05-18 23:05:48 +03:00
|
|
|
ordering = ["name"]
|
2025-05-18 21:29:04 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
class Profession(models.Model):
|
|
|
|
|
name = models.CharField(max_length=256, 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 23:05:48 +03:00
|
|
|
ordering = ["name"]
|
2025-05-18 21:29:04 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
class Specialty(models.Model):
|
|
|
|
|
name = models.CharField(max_length=256, verbose_name="Название специальности")
|
|
|
|
|
institution = models.ForeignKey(
|
|
|
|
|
EducationalInstitution, on_delete=models.CASCADE, verbose_name="Образовательное учреждение"
|
|
|
|
|
)
|
|
|
|
|
link = models.URLField(verbose_name="Ссылка", null=True, blank=True)
|
|
|
|
|
|
|
|
|
|
def __str__(self):
|
|
|
|
|
return f"{self.name} ({self.institution})"
|
|
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
|
verbose_name = "Специальность"
|
|
|
|
|
verbose_name_plural = "Специальности"
|
2025-05-18 23:05:48 +03:00
|
|
|
ordering = ["name", "institution"]
|
2025-05-18 21:29:04 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
class ProfessionSpecialtyLink(models.Model):
|
|
|
|
|
profession = models.ForeignKey(
|
|
|
|
|
Profession, on_delete=models.CASCADE, verbose_name="Профессия"
|
|
|
|
|
)
|
|
|
|
|
specialty = models.ForeignKey(
|
|
|
|
|
Specialty, on_delete=models.CASCADE, verbose_name="Специальность"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
def __str__(self):
|
|
|
|
|
return f"{self.profession} - {self.specialty}"
|
|
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
|
verbose_name = "Связь между профессией и специальностью"
|
|
|
|
|
verbose_name_plural = "Связи между профессиями и специальностями"
|
|
|
|
|
unique_together = ("profession", "specialty")
|
2025-05-18 23:05:48 +03:00
|
|
|
ordering = ["profession", "specialty"]
|
2025-05-18 21:29:04 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
class ProfessionTestResult(models.Model):
|
|
|
|
|
profession = models.ForeignKey(
|
|
|
|
|
Profession, on_delete=models.CASCADE, verbose_name="Профессия"
|
|
|
|
|
)
|
|
|
|
|
survey_score_variable = models.ForeignKey(
|
|
|
|
|
ScoreVariable, on_delete=models.CASCADE, verbose_name="Переменная оценки"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
def __str__(self):
|
|
|
|
|
return f"{self.profession} - {self.survey_score_variable}"
|
|
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
|
verbose_name = "Результат теста по профессии"
|
|
|
|
|
verbose_name_plural = "Результаты тестов по профессиям"
|
2025-05-18 23:05:48 +03:00
|
|
|
ordering = ["profession", "survey_score_variable"]
|