from django.db import models from account.models import MyUser from django.template.defaultfilters import slugify from audio.services.service import AzuraCast class Song(models.Model): unique_id = models.CharField('ID трека для плеера', max_length=255, blank=True, null=True) slug = models.SlugField('Слаг трека', blank=True, null=True) azura_id = models.CharField('ID трека с Азуры', max_length=255) title = models.CharField('Название трека', max_length=255) artist = models.CharField('Исполнитель', max_length=255) album = models.CharField('Альбом трека', blank=True, null=True, max_length=255) genre = models.CharField('Жанр трека', blank=True, null=True, max_length=50) art = models.CharField('Изображение трека', blank=True, null=True, max_length=255) def save(self, *args, **kwargs): if not self.id: self.slug = slugify(self.azura_id) super(Song, self).save(*args, **kwargs) def __str__(self): return f"{self.artist} - {self.title}" class Meta: verbose_name = 'Треки' unique_together = ('azura_id', ) verbose_name_plural = 'Треки' def delete(self): azura = AzuraCast() azura.delete_song(self.azura_id) super(Song, self).delete() class FavoriteSong(models.Model): song = models.ForeignKey(Song, verbose_name='Трек', on_delete=models.CASCADE) user = models.ForeignKey(MyUser, verbose_name='Пользователь', on_delete=models.CASCADE) def __str__(self): return f"{self.song.title}" class Meta: verbose_name = 'Избранные Треки' unique_together = ('song', 'user') verbose_name_plural = 'Избранные Треки' class PlayList(models.Model): name = models.CharField('Название плейлиста', max_length=50, blank=True, null=True) song = models.ManyToManyField(Song, blank=True, null=True) user = models.ForeignKey(MyUser, verbose_name='Пользователь', on_delete=models.CASCADE) playlist_art = models.FileField('Изображение плейлиста', blank=True, null=True, upload_to="playlist_images/") def __str__(self): return f"{self.name}" class Meta: verbose_name = 'Плейлисты' verbose_name_plural = 'Плейлисты' class Podkast(models.Model): name = models.CharField('Название подкаста', max_length=100) podkast_file = models.FileField('Файл подкаста', upload_to="podkasts/") podkast_art = models.FileField('Изображение подкаста', blank=True, null=True, upload_to="podkast_images/") def __str__(self): return f"{self.name}" class Meta: verbose_name = 'Подкасты' verbose_name_plural = 'Подкасты'