from django.core.exceptions import ValidationError from django.db import models class UpperCaseCharField(models.CharField): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) def get_prep_value(self, value): value = super().get_prep_value(value) if value is not None: return value.upper() return value class ContainerNumberField(UpperCaseCharField): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) def get_prep_value(self, value): value = super().get_prep_value(value) if value is not None: return value.upper() return value def validate(self, value, model_instance): super().validate(value, model_instance) if value and len(value) != 11: raise ValidationError('Container number must be exactly 11 characters long.')