class MaskedCreditCardField(models.CharField):
def __init__(self, *args, **kwargs):
kwargs['max_length'] = 20
super().__init__(*args, **kwargs)
def to_python(self, value):
if not isinstance(value, str):
raise ValidationError("The card number must be a string")
if not value.isdigit():
raise ValidationError("The card number must contain only digits")
if len(value) != 16:
raise ValidationError("The card number must be exactly 16 characters long")
return f"****-****-****-{value[-4:]}"
class CreditCard(models.Model):
card_owner = models.CharField(max_length=100)
card_number - MaskedCreditCardField()