def __init__(self, *args, **kwargs): super(Album, self).__init__(*args, **kwargs) self.image_handler = ImageHandlerAlbumCover() if self.thumb: self.image_handler.load(self.thumb)
class Album(models.Model): name = models.CharField(max_length=128) description = models.CharField(max_length=255, null=True, blank=True) about = models.TextField(null=True, blank=True) artist = models.ForeignKey(Artist, related_name='albums') thumb = models.CharField(max_length=255) year = models.IntegerField() metadata = JSONField(null=True, blank=True) style = models.ManyToManyField(AlbumStyle) genre = models.ManyToManyField(AlbumGenre) class Meta: unique_together = ('name', 'artist') def __unicode__(self): return self.name_display def __init__(self, *args, **kwargs): super(Album, self).__init__(*args, **kwargs) self.image_handler = ImageHandlerAlbumCover() if self.thumb: self.image_handler.load(self.thumb) @property def name_display(self): splited = self.name.split(' - ') if len(splited) > 1: album = ' - '.join(splited[1:]) return album else: return self.name @property def ordered_songs(self): songs = list(self.songs.all().order_by('position')) zf = lambda x: str(x.position).zfill(3) songs.sort(lambda a, b: 1 if zf(a) > zf(b) else -1) return songs @property def thumb_url(self): return self.image_handler.url('thumb') @property def icon_url(self): return self.image_handler.url('icon') @property def genre_display(self): return ', '.join(map(str, self.genre.all())) @property def style_display(self): return ', '.join(map(str, self.style.all())) @classmethod def pre_save(cls, instance, **kwargs): if instance.id: return instance.artist.albums_count += 1 instance.artist.save() @classmethod def pre_delete(cls, instance, **kwargs): instance.artist.albums_count -= 1 instance.artist.save()