|
2 | 2 |
|
3 | 3 | from django.urls import reverse
|
4 | 4 | from django.conf import settings
|
| 5 | +from django.core.exceptions import ValidationError |
5 | 6 | from django.db import models
|
6 | 7 | from django.db.models.signals import post_save
|
7 | 8 | from django.dispatch import receiver
|
@@ -332,7 +333,20 @@ class ReleaseFile(ContentManageable, NameSlugModel):
|
332 | 333 | filesize = models.IntegerField(default=0)
|
333 | 334 | download_button = models.BooleanField(default=False, help_text="Use for the supernav download button for this OS")
|
334 | 335 |
|
| 336 | + def validate_unique(self, exclude=None): |
| 337 | + if self.download_button: |
| 338 | + qs = ReleaseFile.objects.filter(release=self.release, os=self.os, download_button=True).exclude(pk=self.id) |
| 339 | + if qs.count() > 0: |
| 340 | + raise ValidationError("Only one Release File per OS can have \"Download button\" enabled") |
| 341 | + super(ReleaseFile, self).validate_unique(exclude=exclude) |
| 342 | + |
335 | 343 | class Meta:
|
336 | 344 | verbose_name = 'Release File'
|
337 | 345 | verbose_name_plural = 'Release Files'
|
338 | 346 | ordering = ('-release__is_published', 'release__name', 'os__name', 'name')
|
| 347 | + |
| 348 | + constraints = [ |
| 349 | + models.UniqueConstraint(fields=['os', 'release'], |
| 350 | + condition=models.Q(download_button=True), |
| 351 | + name="only_one_download_per_os_per_release"), |
| 352 | + ] |
0 commit comments