Files
musiclist-server/lists/models.py
Daniel Cortes 329a982641 Api de opinione
2020-07-15 00:35:20 -04:00

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