Skip to content

Commit 2325b52

Browse files
committed
feat: use validators instead of clean, override NameSlugModel name field
1 parent 40c448b commit 2325b52

File tree

2 files changed

+11
-8
lines changed

2 files changed

+11
-8
lines changed

downloads/models.py

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
from pages.models import Page
1818

1919
from .managers import ReleaseManager
20-
20+
from .validators import is_valid_python_release
2121

2222
DEFAULT_MARKUP_TYPE = getattr(settings, 'DEFAULT_MARKUP_TYPE', 'restructuredtext')
2323

@@ -50,6 +50,7 @@ class Release(ContentManageable, NameSlugModel):
5050
(PYTHON2, 'Python 2.x.x'),
5151
(PYTHON1, 'Python 1.x.x'),
5252
)
53+
name = models.CharField(max_length=200, validators=[is_valid_python_release])
5354
version = models.IntegerField(default=PYTHON3, choices=PYTHON_VERSION_CHOICES)
5455
is_latest = models.BooleanField(
5556
verbose_name='Is this the latest release?',
@@ -146,13 +147,6 @@ def is_version_at_least_3_5(self):
146147
def is_version_at_least_3_9(self):
147148
return self.is_version_at_least((3, 9))
148149

149-
def clean(self):
150-
super().clean()
151-
if not re.match(r'^Python\s[\d.]+$', self.name):
152-
raise ValidationError({
153-
"name": "Release name must be in the format 'Python X.Y.Z' (e.g., 'Python 3.14.0')"
154-
})
155-
156150

157151
def update_supernav():
158152
latest_python3 = Release.objects.latest_python3()

downloads/validators.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
"""Model valdators for the DOwnloads app."""
2+
3+
from django.core.exceptions import ValidationError
4+
from django.core import validators
5+
6+
is_valid_python_release = validators.RegexValidator(
7+
regex=r'^Python\s[\d.]+$',
8+
message="Release name must be in the format 'Python X.Y.Z' (e.g., 'Python 3.14.0')"
9+
)

0 commit comments

Comments
 (0)