Пример #1
0
 def __init__(self, *args, **kwargs):
     super(Album, self).__init__(*args, **kwargs)
     self.image_handler = ImageHandlerAlbumCover()
     if self.thumb:
         self.image_handler.load(self.thumb)
Пример #2
0
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()