from django.db import models from django.urls import reverse from django.contrib.auth.models import User from django.core.validators import MinValueValidator,MaxValueValidator from django.utils.text import slugify from core.models import Profilo # Create your models here. class GenereAnime(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('anime_genere', kwargs={'genere': self.genere}) class Anime(models.Model): titolo = models.CharField(max_length=120) descrizione = models.TextField() immagine_poster = models.ImageField(null=True,blank=True) 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') genere = models.ManyToManyField(GenereAnime) LINGUE = [ ('ITA', "Italiano"), ('SUB-ITA', "Sottotitolato In Italiano"), ] lingua = models.CharField(max_length=12,choices=LINGUE,default="ITA") 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) slug = models.SlugField(null=True,blank=True) preferito = models.ManyToManyField(Profilo,related_name="anime_preferiti",blank=True) guarda_dopo = models.ManyToManyField(Profilo,related_name="anime_watch_later",blank=True) data_uscita = models.CharField(max_length=20,null=True,blank=True) visualizzazioni = models.IntegerField(default=0) durata = 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(Anime,self).save(*args, **kwargs) def __str__(self): return self.titolo class Meta: verbose_name = "Anime" verbose_name_plural = "Anime" def get_absolute_url(self): return reverse('anime-detail', kwargs={'slug': self.slug}) class Stagioni(models.Model): numero_stagione = models.IntegerField() anime = models.ForeignKey(Anime,on_delete=models.CASCADE,related_name="animestagioni") def __str__(self): return f"{self.anime.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.anime.titolo} S{self.stagione.numero_stagione} E{self.numero_episodio}" class Meta: verbose_name = "Episodio" verbose_name_plural = "Episodi" class CommentoAnime(models.Model): utente = models.ForeignKey(Profilo,on_delete=models.CASCADE,related_name="commenti_utente_anime") commento = models.TextField() data_commento = models.DateTimeField(auto_now_add=True) media = models.ForeignKey(Anime,on_delete=models.CASCADE,related_name="commenti_anime",blank=True,null=True) class Meta: verbose_name = "Commento" verbose_name_plural = "Commenti" def __str__(self): return f"{self.utente.user} ha scritto un commento sull'Anime {self.media.titolo}" class SegnalazioneAnime(models.Model): LISTA_PROBLEMI_VIDEO = [ ('Link Non Funzionante', 'Link Non Funzionante'), ('Video Pessima Qualitá', 'Video Pessima Qualitá'), ('Audio Mancante', 'Audio Mancante'), ('Episodio Incompleto', 'Episodio Incompleto'), ('Altro', 'Altro'), ] problema_video = models.CharField( max_length=50, choices=LISTA_PROBLEMI_VIDEO, default='Link Non Funzionante', ) descrizione_problema = models.TextField() anime = models.ForeignKey(Anime,on_delete=models.CASCADE,related_name="anime_segnalato") class Meta: verbose_name = "Segnalazione" verbose_name_plural = "Segnalazioni" def __str__(self): return f"Hanno Segnalato un Problema sull'Anime {self.anime.titolo}" class SpecialiVideo(models.Model): stagione = models.ForeignKey(Stagioni,on_delete=models.CASCADE,related_name="stagione_speciali") titolo = models.CharField(max_length=120) streaming_link = models.URLField() def __str__(self): return f" {self.stagione.anime.titolo} - {self.titolo}" class Meta: verbose_name = "Speciale" verbose_name_plural = "Speciali" class Immagini(models.Model): anime = models.ForeignKey(Anime,on_delete=models.CASCADE,related_name="immagini_serietv") immagini = models.ImageField(null=True,blank=True) def __str__(self): return f"Immagini dell'Anime {self.anime.titolo}"