from django.db import models from django.db.models.signals import pre_save from django.dispatch.dispatcher import receiver from django.template.defaultfilters import slugify ART_GENRE_HINT = 'lowercase please!' ART_DESC_HINT = 'Markdown or HTML formatting supported' ART_TYPES_HINT = 'main roster (0), side project (1)' class Artist(models.Model): """ An Artist of the label. """ name = models.CharField(max_length=64) slug = models.SlugField() image = models.ImageField(upload_to='artists') url_bandcamp = models.URLField(blank=True) url_soundcloud = models.URLField(blank=True) genre = models.CharField(max_length=256, help_text=ART_GENRE_HINT) description = models.TextField(blank=True, help_text=ART_DESC_HINT) artist_type = models.IntegerField(default=0, help_text=ART_TYPES_HINT) def __str__(self): return self.name class Meta(object): ordering = ('name',) @receiver(pre_save, sender = Artist) def _artist_pre_save(sender, instance, **kwargs): instance.slug = slugify(instance.name) class Release(models.Model): """ A release (album, EP, ...) of the label. Each release has an associated number "ident" to use in the catalog. It has of course a title, several possible artists, and other informations. Attributes: ident: catalog number title: release title contributors: list of Artists who contributed to this release release_type: see below year: year of release cover: image file associated to this release """ REL_TYPES_HINT = 'full-length (0), EP (1), Split (2), Démo (3)' REL_EMBED_HINT = 'HTML iframe -- for Bandcamp, add the whole tracklist' ident = models.IntegerField() title = models.CharField(max_length=256) contributors = models.ManyToManyField(Artist) release_type = models.IntegerField(default=0, help_text=REL_TYPES_HINT) cover = models.ImageField(upload_to='releases') year = models.IntegerField() embed = models.TextField(blank=True, help_text=REL_EMBED_HINT) description = models.TextField(blank=True) def __str__(self): return self.title class Meta(object): ordering = ('ident', 'title')