site_tps/content/models.py

71 lines
1.8 KiB
Python

import os
from django.db import models
from django.core.exceptions import ValidationError
from django.urls import reverse
from users.models import School
class Category(models.Model):
"""Une catégorie de contenu."""
name = models.CharField(
max_length=255,
verbose_name="Nom de la catégorie"
)
description_short = models.TextField(
verbose_name="Description courte",
null=True,
)
description = models.TextField(
verbose_name="Description de la catégorie",
default=""
)
image = models.ImageField(
verbose_name="Illustration de la catégorie",
null=True,
)
def get_absolute_url(self):
return reverse('content:category', kwargs={'pk': self.pk})
def __str__(self):
return self.name
def get_upload_to(instance, filename):
extension = filename.split('.')[-1]
return "static/media/"+instance.school.name+"/"+instance.category.name+'.'+extension
def validate_file_extension(value):
ext = os.path.splitext(value.name)[1] # [0] returns path+filename
valid_extensions = ['mp4', 'avi', 'mov']
if not ext.lower() in valid_extensions:
raise ValidationError(u'Unsupported file extension.')
class Content(models.Model):
"""Un contenu du site (vidéo)."""
name = models.CharField(
max_length=255,
verbose_name="Nom du contenu"
)
school_owner = models.ForeignKey(
School,
on_delete=models.CASCADE,
)
category = models.ForeignKey(
Category,
on_delete=models.SET_NULL,
verbose_name="Catégorie",
null=True
)
file = models.FileField(
verbose_name="Fichier",
validators=[validate_file_extension],
upload_to=get_upload_to
)
def __str__(self):
return self.name