from django.core.validators import MaxValueValidator, MinValueValidator from django.db import models from django.utils.translation import gettext_lazy as _ class FeedbackIntegerField(models.IntegerField): def __init__(self, **kwargs): validators = kwargs.pop("validators", []) nullable = kwargs.pop("null", True) super().__init__( validators=validators + [MinValueValidator(1), MaxValueValidator(4)], null=nullable, **kwargs ) class FeedbackResponse(models.Model): class DiscoveredChoices(models.TextChoices): INTERNET = "I", _("Internet") LEAFLET = "L", _("Leaflet") NEWSPAPER = "N", _("Newspaper") RECOMMENDATION = "R", _("Personal recommendation") EVENT = "E", _("Public event") OTHER = "O", _("Other") class RatingChoices(models.IntegerChoices): ONE = 1, "1" TWO = 2, "2" THREE = 3, "3" FOUR = 4, "4" class PercentageChoices(models.IntegerChoices): TWENTY = 20, "20%" FOURTY = 40, "40%" SIXTY = 60, "60%" EIGHTY = 80, "80%" HUNDRED = 100, "100%" satisfaction = FeedbackIntegerField() goal_attainment = FeedbackIntegerField() proficiency = models.IntegerField(null=True) received_materials = models.BooleanField(null=True) materials_rating = FeedbackIntegerField() instructor_competence = FeedbackIntegerField() instructor_respect = FeedbackIntegerField() instructor_open_feedback = models.TextField(blank=True) would_recommend = models.BooleanField(null=True) course_positive_feedback = models.TextField(blank=True) course_negative_feedback = models.TextField(blank=True) circle = models.ForeignKey("learnpath.Circle", models.PROTECT)