Added slug fields to Ensemble and Project

This commit is contained in:
Tris 2021-03-03 21:07:36 +11:00
parent 7a58d8b32d
commit 98fe7b77ce
2 changed files with 15 additions and 3 deletions

View File

@ -5,11 +5,11 @@ from django.contrib import admin
from . import models from . import models
class EnsembleAdmin(admin.ModelAdmin): class EnsembleAdmin(admin.ModelAdmin):
list_display = ['name', 'ensemble_code'] list_display = ['name', 'ensemble_code', 'slug']
class ProjectAdmin(admin.ModelAdmin): class ProjectAdmin(admin.ModelAdmin):
list_display = ['name', 'ensemble', 'deadline', 'active'] list_display = ['name', 'ensemble', 'deadline', 'active', 'slug']
list_filter = ['ensemble', 'active'] list_filter = ['ensemble', 'active']
class SubmissionAdmin(admin.ModelAdmin): class SubmissionAdmin(admin.ModelAdmin):

View File

@ -31,6 +31,7 @@ class Ensemble(models.Model):
code = models.CharField(max_length=9, default=generate_code) code = models.CharField(max_length=9, default=generate_code)
passphrase = models.CharField(max_length=100) passphrase = models.CharField(max_length=100)
admins = models.ManyToManyField('auth.User', related_name='ensembles') admins = models.ManyToManyField('auth.User', related_name='ensembles')
slug = models.SlugField(max_length=100, editable=False)
def active_projects(self): def active_projects(self):
return self.projects.filter(active=True) return self.projects.filter(active=True)
@ -39,6 +40,11 @@ class Ensemble(models.Model):
code = str(self.code) code = str(self.code)
return "{}-{}-{}".format(code[:3], code[3:6], code[6:]) return "{}-{}-{}".format(code[:3], code[3:6], code[6:])
def save(self):
if not self.slug:
self.slug = slugify(self.name)
super(Ensemble, self).save()
def __str__(self): def __str__(self):
return self.name return self.name
@ -49,15 +55,21 @@ class Project(models.Model):
active = models.BooleanField(default=True) active = models.BooleanField(default=True)
deadline =models.DateField(null=True, blank=True) deadline =models.DateField(null=True, blank=True)
owner = models.CharField(max_length=255, blank=True) owner = models.CharField(max_length=255, blank=True)
slug = models.SlugField(max_length=100, editable=False)
@property @property
def submissions(self): def submissions(self):
return self.all_submissions.filter(complete=True).order_by('-pk') return self.all_submissions.filter(complete=True).order_by('-pk')
def presigned_post(self, object_name, fields=None, conditions=None, expires=3600): def presigned_post(self, object_name, fields=None, conditions=None, expires=3600):
key = os.path.join(slugify(self.name), object_name) key = os.path.join(self.slug, object_name)
return s3client.generate_presigned_post(BUCKET, key, Fields=fields or {}, Conditions=conditions or [], ExpiresIn=expires) return s3client.generate_presigned_post(BUCKET, key, Fields=fields or {}, Conditions=conditions or [], ExpiresIn=expires)
def save(self):
if not self.slug:
self.slug = slugify(self.name)
super(Project, self).save()
def __str__(self): def __str__(self):
return self.name return self.name