class Incident(models.Model): class Meta: db_table = 'monitor_incident' ordering = ['-last_dttm'] class StatusChoices(DjangoChoices): NORMAL = ChoiceItem("Normal", "Normal", 1) WARNING = ChoiceItem("Warning", 'Warning', 2) CRITICAL = ChoiceItem("Critical", "Critical", 3) BLACKOUT = ChoiceItem("Blackout", "Blackout", 4) UNKNOWN = ChoiceItem("Unknown", "Unknown", 5) WATCHING = ChoiceItem("Watching", "Watching", 6) server = ForeignKey(Server, on_delete=deletion.CASCADE, null=False) threshold_test = ForeignKey(ThresholdTest, on_delete=deletion.ProtectedError, null=False, default='') start_dttm = DateTimeField(editable=False, auto_now_add=True, null=False) last_dttm = DateTimeField() closed_dttm = DateTimeField(null=True, blank=True) closed_sw = BooleanField(default=False) min_value = DecimalField(null=False, max_digits=6, decimal_places=2, default=0) cur_value = DecimalField(null=False, max_digits=6, decimal_places=2, default=0) max_value = DecimalField(null=False, max_digits=6, decimal_places=2, default=0) cur_test_w_values = CharField(max_length=500, null=False, default='') pending_status = CharField(max_length=15, null=False, default='', choices=StatusChoices.choices) current_status = CharField(max_length=15, null=False, choices=StatusChoices.choices, default=StatusChoices.WATCHING) max_status = CharField(max_length=15, null=False, choices=StatusChoices.choices, default=StatusChoices.WATCHING) detail_element = CharField(max_length=25, null=False, default='') critical_ticks = IntegerField(validators=[MinValueValidator(0), MaxValueValidator(3)], null=False, default=0) warning_ticks = IntegerField(validators=[MinValueValidator(0), MaxValueValidator(3)], null=False, default=0) normal_ticks = IntegerField(validators=[MinValueValidator(0), MaxValueValidator(3)], null=False, default=0) note = CharField(max_length=4000, null=True, blank=True) note_by = CharField(max_length=30, null=True, blank=True) ticket = CharField(max_length=30, null=True, blank=True) created_dttm = DateTimeField(editable=False, auto_now_add=True) updated_dttm = DateTimeField(auto_now=True)
class Process(models.Model): owner = models.ForeignKey('auth.User', related_name='process_list', on_delete=models.CASCADE) service = models.CharField(max_length=15, choices=SERVICE_CHOICES) income = models.IntegerField(default=0) discount = models.IntegerField(default=0) tax_percent = models.PositiveIntegerField( default=1, validators=[MinValueValidator(1), MaxValueValidator(25)]) unit = models.PositiveIntegerField(default=1, validators=[MinValueValidator(1)]) bulk = models.BooleanField(default=False) stage = models.PositiveIntegerField( default=1, validators=[MinValueValidator(1), MaxValueValidator(10)]) created = models.DateTimeField(auto_now_add=True) def grand_total(self): return (self.income - self.discount + (self.tax_percent * self.income) / 100) def clean(self): # Don't allow Hardware services to have stages more than 5. if self.service == 'Hardware' and self.stage > 5: raise ValidationError( {'service': _('Hardware service has no more than 5 stages.')}) if self.bulk == 0 and self.stage > 1: raise ValidationError({ 'bulk': _('Items not purchased in bulk but Unit is defined more than 1.' ) }) if self.bulk == 1 and self.stage == 1: raise ValidationError( {'bulk': _('Items purchased in bulk but unit is equal to 1.')}) #To call the model clean method we will override save method. def save(self, *args, **kwargs): self.clean() return super(Process, self).save(*args, **kwargs) def __str__(self): return "{} at stage {}".format(self.service, self.stage) class Meta: ordering = ('-created', )
class Mark(models.Model): student = models.ForeignKey(Student, on_delete=models.CASCADE) course = models.ForeignKey(Course, on_delete=models.CASCADE) semester = models.ForeignKey(Semester, on_delete=models.CASCADE) classroom = models.ForeignKey(ClassRoom, on_delete=models.CASCADE) mark = models.FloatField( max_length=2, validators=[MinValueValidator(0), MaxValueValidator(20)], default=0) def __str__(self): return '{0} | {1} | {2} | {3}'.format(self.course, self.semester, self.mark, self.student) def save(self, force_insert=False, force_update=False, using=None, update_fields=None): self.classroom = ClassRoomEnrollment.objects.get( semester=self.semester, student=self.student).classroom super(Mark, self).save() class Meta: unique_together = (("student", "course", "semester"), )
def __init__(self, max_digits, decimal_places, coerce_to_string=None, max_value=None, min_value=None, **kwargs): self.max_digits = max_digits self.decimal_places = decimal_places self.coerce_to_string = coerce_to_string if ( coerce_to_string is not None) else self.coerce_to_string self.max_value = max_value self.min_value = min_value super(DecimalField, self).__init__(**kwargs) if self.max_value is not None: message = self.error_messages['max_value'].format( max_value=self.max_value) self.validators.append( MaxValueValidator(self.max_value, message=message)) if self.min_value is not None: message = self.error_messages['min_value'].format( min_value=self.min_value) self.validators.append( MinValueValidator(self.min_value, message=message))
class Submission(models.Model): filename = models.FileField(upload_to="submissions/") info = models.TextField(default="None") timeTaken = models.DecimalField(null=False, default=0, decimal_places=4, max_digits=6) late = models.BooleanField(default=False) status = EnumField(choices=["start", "in_progress", "complete", "late"]) result = EnumField(choices=["pass", "fail", "error", "overtime"]) language = EnumField( choices=["python2", "python3", "java", "cpp", "c", "ruby"], default="python2") marks = models.IntegerField( validators=[MinValueValidator(0), MaxValueValidator(100)]) output = models.TextField def __str__(self): return "Submission: " + str(self.id) + " " + str(self.filename) user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, null=False) assessment = models.ForeignKey(Assessment, on_delete=models.CASCADE, null=False, related_name="submissions") created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True)
class Submission(models.Model): filename = models.FileField(upload_to='submissions/') info = models.TextField(default='None') timeTaken = models.DecimalField(null=False, default=0, decimal_places=4, max_digits=4) late = models.BooleanField(default=False) status = EnumField(choices=['start', 'in_progress', 'complete', 'late']) result = EnumField(choices=['pass', 'fail', 'error']) language = EnumField( choices=['python2', 'python3', 'java', 'cpp', 'c', 'ruby'], default='python2') marks = models.IntegerField( validators=[MinValueValidator(0), MaxValueValidator(100)]) output = models.TextField def __str__(self): return 'Submission: ' + str(self.id) + ' ' + str(self.filename) user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, null=False) assessment = models.ForeignKey(Assessment, on_delete=models.CASCADE, null=False, related_name="submissions") created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True)
class Movie(models.Model): title = models.CharField(max_length=256) price = models.DecimalField(decimal_places=2, max_digits=5) genre = models.PositiveSmallIntegerField(null=True, choices=choices.GENRE_CHOICES) score = models.IntegerField( default=0, validators=[MinValueValidator(0), MaxValueValidator(10)])
class ThresholdTest(models.Model): class Meta: db_table = 'monitor_threshold_test' threshold_metric = ForeignKey(ThresholdMetricLookup, on_delete=CASCADE, default='') detail_element = CharField(max_length=50, null=True, blank=True) normal_ticks = IntegerField(validators=[MinValueValidator(1), MaxValueValidator(5)], null=False, default=3) warning_ticks = IntegerField(validators=[MinValueValidator(1), MaxValueValidator(5)], null=False, default=3) warning_predicate_type = CharField(max_length=15, null=False, choices=PredicateTypeChoices.choices, default=PredicateTypeChoices.GTE) warning_value = CharField(max_length=100, null=False, default='') critical_ticks = IntegerField(validators=[MinValueValidator(1), MaxValueValidator(5)], null=False, default=3) critical_predicate_type = CharField(max_length=15, null=False, choices=PredicateTypeChoices.choices, default=PredicateTypeChoices.GTE) critical_value = CharField(max_length=100, null=False, default='') notification_method = ForeignKey(ThresholdNotificationMethodLookup, on_delete=CASCADE, default='') active_sw = BooleanField(default=True, null=False) created_dttm = DateTimeField(editable=False, auto_now_add=True) updated_dttm = DateTimeField(auto_now=True)
class IncidentDetail(models.Model): class Meta: db_table = 'monitor_incident_details' ordering = ['-created_dttm'] incident = ForeignKey(Incident, on_delete=deletion.CASCADE, null=False) cur_value = DecimalField(null=False, max_digits=6, decimal_places=2, default=0) min_value = DecimalField(null=False, max_digits=6, decimal_places=2, default=0) max_value = DecimalField(null=False, max_digits=6, decimal_places=2, default=0) cur_test_w_values = CharField(max_length=500, null=False, default='') max_status = CharField(max_length=15, null=False, choices=Incident.StatusChoices.choices, default=Incident.StatusChoices.WATCHING) pending_status = CharField(max_length=15, null=False, choices=Incident.StatusChoices.choices, default=Incident.StatusChoices.WATCHING) current_status = CharField(max_length=15, null=False, choices=Incident.StatusChoices.choices, default=Incident.StatusChoices.WATCHING) critical_ticks = IntegerField(validators=[MinValueValidator(0), MaxValueValidator(3)], null=False, default=0) warning_ticks = IntegerField(validators=[MinValueValidator(0), MaxValueValidator(3)], null=False, default=0) normal_ticks = IntegerField(validators=[MinValueValidator(0), MaxValueValidator(3)], null=False, default=0) created_dttm = DateTimeField(editable=False, auto_now_add=True)
class GameMinimalSerializer(serializers.Serializer): date = serializers.DateField(required=True) journey = serializers.IntegerField(required=True, validators=[ MaxValueValidator(MAX_JOURNEY), MinValueValidator(MIN_JOURNEY) ]) stadium = serializers.CharField(required=True, max_length=200)
class ExamPaperCreateRuleSerializer(serializers.ModelSerializer): grade = serializers.DecimalField(max_digits=5, decimal_places=2, default=1.00, validators=[ MinValueValidator(Decimal((0, (0, 0, 1), -2))), MaxValueValidator(Decimal(100))]) class Meta: model = ExamPaperCreateRule fields = ('section_name', 'problem_section_id', 'problem_type', 'problem_num', 'grade')
class ExamPaperProblemsSerializer(serializers.ModelSerializer): content = serializers.JSONField(required=True) grade = serializers.DecimalField(max_digits=5, decimal_places=2, validators=[ MinValueValidator(Decimal((0, (0, 0, 1), -2))), MaxValueValidator(Decimal(100))]) class Meta: model = ExamPaperProblems fields = ('sequence', 'problem_id', 'grade', 'problem_type', 'content')
def __init__(self, **kwargs): self.max_value = kwargs.pop('max_value', None) self.min_value = kwargs.pop('min_value', None) super(FloatField, self).__init__(**kwargs) if self.max_value is not None: message = self.error_messages['max_value'].format(max_value=self.max_value) self.validators.append(MaxValueValidator(self.max_value, message=message)) if self.min_value is not None: message = self.error_messages['min_value'].format(min_value=self.min_value) self.validators.append(MinValueValidator(self.min_value, message=message))
class GameStatusSerializer(serializers.Serializer): shots = serializers.IntegerField(required=True, validators=[MinValueValidator(0)]) ball_possession = serializers.IntegerField( required=True, validators=[MaxValueValidator(100), MinValueValidator(0)]) corners = serializers.IntegerField(required=True, validators=[MinValueValidator(0)]) goals = serializers.IntegerField(required=True, validators=[MinValueValidator(0)])
class ExamPaperFixedSerializer(serializers.ModelSerializer): problems = ExamPaperProblemsSerializer(many=True, required=False) description = serializers.CharField(required=False, allow_blank=True) passing_ratio = serializers.IntegerField( default=60, validators=[MinValueValidator(1), MaxValueValidator(100)]) class Meta: model = ExamPaper fields = ( 'name', 'description', 'create_type', 'creator', 'passing_ratio', 'problems', ) def create(self, validated_data): if 'problems' in validated_data: problems_data = validated_data.pop('problems') else: problems_data = [] exam_paper = ExamPaper.objects.create(**validated_data) with transaction.atomic(): for problem_data in problems_data: problem_serializer = ExamPaperProblemsSerializer( data=problem_data) problem_serializer.is_valid(raise_exception=True) ExamPaperProblems.objects.create( exam_paper=exam_paper, **problem_serializer.validated_data) return exam_paper def update(self, exam_paper, validated_data): if 'problems' in validated_data: problems_data = validated_data.pop('problems') else: problems_data = [] with transaction.atomic(): exam_paper.__dict__.update(**validated_data) exam_paper.save() exam_paper.problems.all().delete() for problem_data in problems_data: if problem_data.get('id'): problem_data.pop('id') problem_serializer = ExamPaperProblemsSerializer( data=problem_data) problem_serializer.is_valid(raise_exception=True) ExamPaperProblems.objects.create( exam_paper=exam_paper, **problem_serializer.validated_data) return exam_paper
class GetQuestionValidateSerializer(serializers.Serializer): """問題取得用シリアライザー""" group_id = serializers.UUIDField(required=True) limit = serializers.IntegerField(required=False) degree = serializers.IntegerField( required=True, validators=[MinValueValidator(1), MaxValueValidator(3)]) def validate_group_id(self, value): if not Question.objects.filter(group=value).values().exists(): raise ValidationError( detail="group_id is not found. group_id={}".format(value)) return value
class Comment(models.Model): name = models.CharField(max_length=128, blank=False) description = models.CharField(max_length=255, blank=True) image = models.ImageField(upload_to='img', null=True) stars = models.IntegerField( blank=False, null=False, validators=[MinValueValidator(1), MaxValueValidator(5)]) pub = models.ForeignKey(Pub, null=False, on_delete=models.CASCADE, related_name="comments")
class GameSerializer(serializers.Serializer): # TODO -> EXTENDER DO GameSerializer date = serializers.DateField(required=True) journey = serializers.IntegerField(required=True, validators=[ MaxValueValidator(MAX_JOURNEY), MinValueValidator(MIN_JOURNEY) ]) stadium = serializers.CharField(required=True, max_length=200) teams = serializers.ListField(required=True, min_length=2, max_length=2, child=serializers.CharField(max_length=200)) goals = serializers.ListField( required=True, min_length=2, max_length=2, child=serializers.IntegerField(validators=[MinValueValidator(0)])) shots = serializers.ListField( required=True, min_length=2, max_length=2, child=serializers.IntegerField(validators=[MinValueValidator(0)])) ball_possessions = serializers.ListField( required=True, min_length=2, max_length=2, child=serializers.IntegerField( required=True, validators=[MaxValueValidator(100), MinValueValidator(0)])) corners = serializers.ListField( required=True, min_length=2, max_length=2, child=serializers.IntegerField(validators=[MinValueValidator(0)]))
class Review(models.Model): grade = models.IntegerField(validators=[MinValueValidator(0), MaxValueValidator(5)]) room = models.ForeignKey(Room, on_delete=models.CASCADE) guest = models.ForeignKey(NormalUser, on_delete=models.CASCADE) comment = models.TextField() created_at = models.DateField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True) def save(self, *args, **kwargs): # 후기 남기고 평점 남기면 바로 계산하여 저장 super().save(*args, **kwargs) average = Review.objects.filter(room_id=self.room.pk).aggregate(Avg('grade')) room_rate = Room.objects.get(pk=self.room.pk) room_rate.rate_average = average['grade__avg'] room_rate.save()
class Pub(models.Model): name = models.CharField(max_length=50, blank=False) address = models.CharField(max_length=255, blank=True) latitude = models.FloatField(blank=False, null=False) longitude = models.FloatField(blank=False, null=False) open = models.TimeField(blank=True) close = models.TimeField(blank=True) created = models.DateTimeField(auto_now_add=True) updated = models.DateTimeField(auto_now=True) cheap = models.IntegerField( blank=False, null=False, validators=[MinValueValidator(1), MaxValueValidator(3)]) def __str__(self): return self.name + ' - ' + self.address
class ExamPaperRandomSerializer(serializers.ModelSerializer): rules = ExamPaperCreateRuleSerializer(many=True, required=False) passing_ratio = serializers.IntegerField( default=60, validators=[MinValueValidator(1), MaxValueValidator(100)]) description = serializers.CharField(required=False, allow_blank=True) class Meta: model = ExamPaper fields = ('name', 'description', 'create_type', 'creator', 'passing_ratio', 'rules') def create(self, validated_data): if 'rules' in validated_data: rules_data = validated_data.pop('rules') else: rules_data = [] exam_paper = ExamPaper.objects.create(**validated_data) with transaction.atomic(): for rule_data in rules_data: rule_serializer = ExamPaperCreateRuleSerializer(data=rule_data) rule_serializer.is_valid(raise_exception=True) ExamPaperCreateRule.objects.create( exam_paper=exam_paper, **rule_serializer.validated_data) return exam_paper def update(self, exam_paper, validated_data): if 'rules' in validated_data: rules_data = validated_data.pop('rules') else: rules_data = [] with transaction.atomic(): exam_paper.__dict__.update(**validated_data) exam_paper.save() exam_paper.rules.all().delete() for rule_data in rules_data: if rule_data.get('id'): rule_data.pop('id') rule_serializer = ExamPaperCreateRuleSerializer(data=rule_data) rule_serializer.is_valid(raise_exception=True) ExamPaperCreateRule.objects.create( exam_paper=exam_paper, **rule_serializer.validated_data) return exam_paper
class ConfiguracionEmpleadoForm(forms.Form): minutos_tolerancia = forms.IntegerField( label='Minutos de Tolerancia', required=True, validators=[MaxValueValidator(60), MinValueValidator(0)], widget=forms.TextInput( attrs={ 'class': 'col-md-4 form-control', "type": "number", "min": "0", "max": "60", "value": "10" })) empleado = forms.Field( label="Empleado:", required=True, widget=forms.Select(attrs={'class': 'col-md-4 form-control'}))
class Pizza(models.Model): PIZZA_TYPES = ( ('R', 'Regular'), ('S', 'Sicilian'), ) name = models.CharField(max_length=255) small_price = models.DecimalField(max_digits=5, decimal_places=2) large_price = models.DecimalField(max_digits=5, decimal_places=2, null=True) max_toppings = models.PositiveSmallIntegerField( default=0, validators=[MaxValueValidator(9)]) pizza_type = models.CharField(max_length=1, choices=PIZZA_TYPES, default='R') def __str__(self): return "{pizza_type} : {pizza_name}".format( pizza_type=self.get_pizza_type_display(), pizza_name=self.name)
class BasicSerializer(serializers.Serializer): VIN = serializers.CharField(validators=[validate_vin], read_only=False) year = serializers.IntegerField( validators=[MinValueValidator(1980), MaxValueValidator(datetime.now().year)]) make = serializers.CharField(max_length=100) model = serializers.CharField(max_length=100, allow_blank=True) type = serializers.CharField(max_length=100, allow_blank=True) color = serializers.CharField(max_length=100, allow_blank=True) dimensions = serializers.JSONField() weight = serializers.JSONField() def create(self, validated_data): """ Create and return a new `Basic VIN detail` instance, given the validated data. """ return Basic.objects.create(**validated_data) def update(self, instance, validated_data): pass
class Question(models.Model): question_id = models.AutoField(primary_key=True) group = models.ForeignKey(Group, on_delete=models.CASCADE) user = models.ForeignKey(User, on_delete=models.CASCADE) question_type = models.CharField(max_length=6, choices=(('input', 'input'), ('select', 'select')), default='select', null=False) degree = models.IntegerField( validators=[MinValueValidator(1), MaxValueValidator(3)], null=False) question = models.CharField(max_length=255, null=False) shape_path = models.URLField(null=True) correct = models.CharField(max_length=255, null=False) choice_1 = models.CharField(max_length=255, null=True) choice_2 = models.CharField(max_length=255, null=True) choice_3 = models.CharField(max_length=255, null=True) choice_4 = models.CharField(max_length=255, null=True) is_deleted = models.BooleanField(default=False, null=False) create_date = models.DateTimeField(default=timezone.now, null=False) update_date = models.DateTimeField(default=timezone.now, null=False)
class Review(models.Model): user = models.ForeignKey( verbose_name='user', to=settings.AUTH_USER_MODEL, related_name='reviews', on_delete=models.SET_NULL, null=True, ) restaurant = models.ForeignKey( Restaurant, related_name='reviews', on_delete=models.CASCADE, ) content = models.TextField(verbose_name='review_content', ) rating = models.IntegerField( verbose_name='restaurant_rating', validators=[MaxValueValidator(5), MinValueValidator(1)]) created = models.DateTimeField( verbose_name='date_created', auto_now_add=True, ) modified = models.DateTimeField( verbose_name='date_modified', auto_now=True, ) class Meta: verbose_name = 'Review' verbose_name_plural = 'Reviews' ordering = ['-modified'] unique_together = [('user', 'restaurant')]
class Book(models.Model): category_id = models.ForeignKey(Category, blank=True) author_id = models.ForeignKey(Author, blank=False) name = models.CharField(max_length=30, blank=False) price = models.FloatField(blank=False) author_percentage = models.IntegerField(blank=False, validators=[MinValueValidator(1), MaxValueValidator(100)]) description = models.TextField(blank=True) class Meta: db_table = 'book' def __str__(self): return self.name
class BattleShipSerializer(serializers.ModelSerializer): """ Read fleet_type: battleship, cruiser, ... is_horizontal: True/False staring poink: (1,1) board: board_id """ x_axis = serializers.IntegerField(validators=[ MinValueValidator(1), MaxValueValidator(settings.OCEAN_SIZE) ]) y_axis = serializers.IntegerField(validators=[ MinValueValidator(1), MaxValueValidator(settings.OCEAN_SIZE) ]) vertical = serializers.BooleanField(default=True) class Meta: model = Fleet fields = [ 'id', 'board', 'fleet_type', 'vertical', 'x_axis', 'y_axis', ] read_only_fields = ['id'] @staticmethod def validate_quota(board: Board, fleet_type: ChoiceItem, ship_qty: int, ship_size: int, attrs: typing.Dict): """Acrobatic here because data is flowing backward""" if Fleet.objects.filter( board=board, fleet_type=fleet_type).count() >= ship_qty * ship_size: raise serializers.ValidationError( detail={'board': f"{board} has {fleet_type} over quota"}) else: return attrs # Can not use `validate_fleet_type()` method since I have to use `board` def validate(self, attrs): board = attrs.get('board') if attrs.get('fleet_type') == Fleet.FleetType.battleship: return self.validate_quota(board, Fleet.FleetType.battleship, settings.BATTLESHIP_QTY, settings.BATTLESHIP_SIZE, attrs) if attrs.get('fleet_type') == Fleet.FleetType.cruiser: return self.validate_quota(board, Fleet.FleetType.cruiser, settings.CRUISER_QTY, settings.CRUISER_SIZE, attrs) if attrs.get('fleet_type') == Fleet.FleetType.destroyer: return self.validate_quota(board, Fleet.FleetType.destroyer, settings.DESTROYER_QTY, settings.DESTROYER_SIZE, attrs) if attrs.get('fleet_type') == Fleet.FleetType.submarine: return self.validate_quota(board, Fleet.FleetType.submarine, settings.SUBMARINE_QTY, settings.SUBMARINE_SIZE, attrs) else: raise serializers.ValidationError( detail={'fleet_type': f"Unknown fleet_type"}) def create(self, validated_data): # Add battleship if validated_data.get('fleet_type') == Fleet.FleetType.battleship: objs = add_battleship(validated_data.get('board'), validated_data.get('x_axis'), validated_data.get('y_axis'), validated_data.get('vertical')) elif validated_data.get('fleet_type') == Fleet.FleetType.cruiser: objs = add_cruiser(validated_data.get('board'), validated_data.get('x_axis'), validated_data.get('y_axis'), validated_data.get('vertical')) elif validated_data.get('fleet_type') == Fleet.FleetType.destroyer: objs = add_destroyer(validated_data.get('board'), validated_data.get('x_axis'), validated_data.get('y_axis'), validated_data.get('vertical')) else: # validated_data.get('fleet_type') == Fleet.FleetType.submarine: # With choices. I am sure it will be submarine objs = add_submarine(validated_data.get('board'), validated_data.get('x_axis'), validated_data.get('y_axis'), validated_data.get('vertical')) return objs[0]
class EducationalOpportunity(models.Model): id = models.UUIDField(default=uuid.uuid4, primary_key=True) scales = ArrayField(size=6, validators=[MinLengthValidator(6), MinLengthValidator(6)], base_field=models.IntegerField(validators=[MinValueValidator(0), MaxValueValidator(100)])) activity = models.CharField(max_length=50) objects = EducationalOpportunityManager()