from django.db import models ## Модуль Анкетирование (название приложения: 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 = "Опросы" ordering = ["title"] 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 = "Переменные оценки" ordering = ["survey", "name", "title"] 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 = "Утверждения" ordering = ["statement", "score_variable"] 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 = "Пары вопросов" ordering = ["survey", "statement_a", "statement_b"] 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 = "Вопросы на согласие" ordering = ["survey", "question"] 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 = "Образовательные учреждения" ordering = ["name"] 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 = "Профессии" ordering = ["name"] 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 = "Специальности" ordering = ["name", "institution"] 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") ordering = ["profession", "specialty"] 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 = "Результаты тестов по профессиям" ordering = ["profession", "survey_score_variable"]