LORDCHANNEL2.0/Anime/models.py

139 lines
5.1 KiB
Python

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}"