diff --git a/downloads/models.py b/downloads/models.py index 415804b6e..984613fd4 100644 --- a/downloads/models.py +++ b/downloads/models.py @@ -17,7 +17,7 @@ from pages.models import Page from .managers import ReleaseManager - +from .validators import is_valid_python_release DEFAULT_MARKUP_TYPE = getattr(settings, 'DEFAULT_MARKUP_TYPE', 'restructuredtext') @@ -50,6 +50,7 @@ class Release(ContentManageable, NameSlugModel): (PYTHON2, 'Python 2.x.x'), (PYTHON1, 'Python 1.x.x'), ) + name = models.CharField(max_length=200, validators=[is_valid_python_release]) version = models.IntegerField(default=PYTHON3, choices=PYTHON_VERSION_CHOICES) is_latest = models.BooleanField( verbose_name='Is this the latest release?', diff --git a/downloads/validators.py b/downloads/validators.py new file mode 100644 index 000000000..a40fc6c76 --- /dev/null +++ b/downloads/validators.py @@ -0,0 +1,9 @@ +"""Model validators for the Downloads app.""" + +from django.core.exceptions import ValidationError +from django.core import validators + +is_valid_python_release = validators.RegexValidator( + regex=r'^Python\s[\d.]+$', + message="Release name must be in the format 'Python X.Y.Z' (e.g., 'Python 3.14.0')" +)