"""Definición de los modelos que utilizara la aplicación Lists""" from django.core.validators import MinValueValidator, MaxValueValidator from users.models import User from django.db.models import CharField, TextField, IntegerField from django.db.models import ForeignKey, ManyToManyField from django.db.models import CASCADE from django.db.models import Model class Entity(Model): """Entidad la cual representa una entidad de musicbrainz Pueden ser: artist, release-group, release o recording """ class Meta: verbose_name = 'Entidad' verbose_name_plural = 'Entidades' ENTITY_TYPES = [ ('artist', 'Artista'), ('release-group', 'Grupo de Lanzamientos'), ('release', 'Lanzamiento'), ('recording', 'Grabación') ] mbid = CharField('mbid', max_length=36, primary_key=True) entity_type = CharField('tipo', max_length=25, choices=ENTITY_TYPES) def __str__(self): return self.mbid class Tag(Model): """Tag creada por un usuario""" user = ForeignKey(User, on_delete=CASCADE, related_name='tags') name = CharField('nombre', max_length=50) def __str__(self): return self.name class ListItem(Model): """Item de la lista de un usuario""" class Meta: verbose_name = 'item de lista' verbose_name_plural = 'items de la lista' stars_validators = [MinValueValidator(0), MaxValueValidator(5)] user = ForeignKey(User, on_delete=CASCADE, related_name='list') entity = ForeignKey(Entity, on_delete=CASCADE, related_name='entities') stars = IntegerField('estrellas', default=0, validators=stars_validators, blank=True) opinion = TextField('opinion', default='', blank=True) tags = ManyToManyField(Tag, related_name='list', blank=True) def __str__(self): return f'{self.user.username}:{self.entity.mbid}' class OpinionHelpful(Model): """Voto sobre una opinion""" class Meta: verbose_name = 'valoración de opinion' verbose_name_plural = 'valoraciones de opinion' VOTES = [ ('Y', 'Si'), ('N', 'No'), ('F', 'Divertida') ] user = ForeignKey(User, on_delete=CASCADE) opinion = ForeignKey(ListItem, on_delete=CASCADE) vote = CharField('voto', max_length=1, choices=VOTES) def __str__(self): return f'{self.vote}'