81 lines
2.3 KiB
Python
81 lines
2.3 KiB
Python
"""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}'
|