132 lines
4.7 KiB
Python
132 lines
4.7 KiB
Python
|
from django.core.validators import MinValueValidator,MaxValueValidator
|
||
|
from django.db import models
|
||
|
from django.utils.text import slugify
|
||
|
from django.urls import reverse
|
||
|
from core.models import Profilo
|
||
|
# Create your models here.
|
||
|
|
||
|
class GenereSerieTV(models.Model):
|
||
|
genere = models.CharField(max_length=120)
|
||
|
|
||
|
def __str__(self):
|
||
|
return self.genere
|
||
|
|
||
|
class Meta:
|
||
|
verbose_name = "Genere"
|
||
|
verbose_name_plural = "Generi"
|
||
|
|
||
|
def get_absolute_url(self):
|
||
|
return reverse('generi_lista_serietv', kwargs={'genere': self.genere})
|
||
|
|
||
|
class SerieTV(models.Model):
|
||
|
titolo = models.CharField(max_length=120)
|
||
|
descrizione = models.TextField()
|
||
|
immagine_poster = models.ImageField()
|
||
|
qualità_video = models.CharField(max_length=20,null=True,blank=True)
|
||
|
età_consigliata = models.CharField(max_length=20,null=True,blank=True)
|
||
|
immagine_background = models.ImageField(default='default.png')
|
||
|
LINGUE = [
|
||
|
('ITA', "Italiano"),
|
||
|
('SUB-ITA', "Sottotitolato In Italiano"),
|
||
|
]
|
||
|
lingua = models.CharField(max_length=12,choices=LINGUE,default="ITA")
|
||
|
genere = models.ManyToManyField(GenereSerieTV)
|
||
|
voto = models.FloatField(validators=[MinValueValidator(1.0),MaxValueValidator(10.0)],null=True,blank=True)
|
||
|
creato_in_data = models.DateTimeField(auto_now_add=True,null=True,blank=True)
|
||
|
aggiornato_in_data = models.DateTimeField(auto_now=True)
|
||
|
preferito = models.ManyToManyField(Profilo,related_name="serietv_preferite",blank=True)
|
||
|
guarda_dopo = models.ManyToManyField(Profilo,related_name="serietv_watch_later",blank=True)
|
||
|
slug = models.SlugField()
|
||
|
visualizzazioni = models.IntegerField(default=0)
|
||
|
durata = models.CharField(max_length=20,null=True,blank=True)
|
||
|
data_uscita = models.CharField(max_length=20,null=True,blank=True)
|
||
|
trailer = models.URLField(null=True,blank=True)
|
||
|
|
||
|
def save(self, *args, **kwargs):
|
||
|
self.slug = slugify(self.titolo)
|
||
|
return super(SerieTV,self).save(*args, **kwargs)
|
||
|
|
||
|
def __str__(self):
|
||
|
return self.titolo
|
||
|
|
||
|
class Meta:
|
||
|
verbose_name = "Serie TV"
|
||
|
verbose_name_plural = "Serie TV"
|
||
|
|
||
|
def get_absolute_url(self):
|
||
|
return reverse('serietvdetail', kwargs={'slug': self.slug})
|
||
|
|
||
|
class Stagioni(models.Model):
|
||
|
numero_stagione = models.IntegerField()
|
||
|
serie_tv = models.ForeignKey(SerieTV,on_delete=models.CASCADE,related_name="seriestagioni")
|
||
|
|
||
|
def __str__(self):
|
||
|
return f"{self.serie_tv.titolo} - Stagione {self.numero_stagione}"
|
||
|
|
||
|
class Meta:
|
||
|
verbose_name = "Stagione"
|
||
|
verbose_name_plural = "Stagioni"
|
||
|
ordering = ['numero_stagione']
|
||
|
|
||
|
class Episodi(models.Model):
|
||
|
stagione = models.ForeignKey(Stagioni,on_delete=models.CASCADE,related_name="stagione")
|
||
|
numero_episodio = models.IntegerField()
|
||
|
nome_episodio = models.CharField(max_length=200,default="")
|
||
|
streaming_link = models.URLField()
|
||
|
|
||
|
def __str__(self):
|
||
|
return f"{self.stagione.serie_tv.titolo} S{self.stagione.numero_stagione} E{self.numero_episodio}"
|
||
|
|
||
|
class Meta:
|
||
|
verbose_name = "Episodio"
|
||
|
verbose_name_plural = "Episodi"
|
||
|
|
||
|
class CommentoSerieTV(models.Model):
|
||
|
utente = models.ForeignKey(Profilo,on_delete=models.CASCADE,related_name="commenti_utente_serietv")
|
||
|
commento = models.TextField()
|
||
|
data_commento = models.DateTimeField(auto_now_add=True)
|
||
|
media = models.ForeignKey(SerieTV,on_delete=models.CASCADE,related_name="commenti_serietv")
|
||
|
|
||
|
class Meta:
|
||
|
verbose_name = "Commento"
|
||
|
verbose_name_plural = "Commenti"
|
||
|
|
||
|
def __str__(self):
|
||
|
return f"{self.utente.user} ha scritto un commento sulla SerieTV {self.media.titolo}"
|
||
|
|
||
|
|
||
|
class SegnalazioneSerieTV(models.Model):
|
||
|
LISTA_PROBLEMI_VIDEO = [
|
||
|
('Link Non Funzionante', 'Link Non Funzionante'),
|
||
|
('Video Pessima Qualitá', 'Video Pessima Qualitá'),
|
||
|
('Audio Mancante', 'Audio Mancante'),
|
||
|
('Episodio/i Incompleto', 'Episodio/i Incompleto'),
|
||
|
('Altro', 'Altro'),
|
||
|
]
|
||
|
problema_video = models.CharField(
|
||
|
max_length=50,
|
||
|
choices=LISTA_PROBLEMI_VIDEO,
|
||
|
default='Link Non Funzionante',
|
||
|
)
|
||
|
descrizione_problema = models.TextField()
|
||
|
serietv = models.ForeignKey(SerieTV,on_delete=models.CASCADE,related_name="serietv_segnalata")
|
||
|
|
||
|
class Meta:
|
||
|
verbose_name = "Segnalazione"
|
||
|
verbose_name_plural = "Segnalazioni"
|
||
|
|
||
|
def __str__(self):
|
||
|
return f"Hanno Segnalato un Problema sulla Serie TV {self.serietv.titolo}"
|
||
|
|
||
|
|
||
|
class Immagini(models.Model):
|
||
|
serietv = models.ForeignKey(SerieTV,on_delete=models.CASCADE,related_name="immagini_serietv")
|
||
|
immagini = models.ImageField(null=True,blank=True)
|
||
|
|
||
|
def __str__(self):
|
||
|
return f"Immagini della SerieTV {self.serietv.titolo}"
|
||
|
|
||
|
class Meta:
|
||
|
verbose_name_plural = "Immagini"
|
||
|
|