lib.itmens/catalog/music/models.py

76 lines
2.4 KiB
Python
Raw Normal View History

2023-02-15 15:45:57 -05:00
from datetime import date
from catalog.common.models import *
2022-12-16 01:08:10 -05:00
from django.utils.translation import gettext_lazy as _
from django.db import models
2023-02-15 15:45:57 -05:00
class AlbumInSchema(ItemInSchema):
other_title: str | None = None
genre: list[str]
artist: list[str]
company: list[str]
duration: int | None = None
release_date: date | None = None
track_list: str | None = None
class AlbumSchema(AlbumInSchema, BaseSchema):
2023-02-15 16:22:32 -05:00
barcode: str | None = None
2023-02-15 15:45:57 -05:00
pass
class Album(Item):
2022-12-29 23:57:02 -05:00
url_path = "album"
2022-12-11 23:20:28 +00:00
category = ItemCategory.Music
2022-12-29 23:57:02 -05:00
demonstrative = _("这张专辑")
2022-12-08 15:45:37 +00:00
barcode = PrimaryLookupIdDescriptor(IdType.GTIN)
douban_music = PrimaryLookupIdDescriptor(IdType.DoubanMusic)
spotify_album = PrimaryLookupIdDescriptor(IdType.Spotify_Album)
2022-12-16 01:08:10 -05:00
METADATA_COPY_LIST = [
2022-12-29 23:57:02 -05:00
"title",
"other_title",
2023-01-05 03:06:13 -05:00
"artist",
"company",
"track_list",
"brief",
2022-12-29 23:57:02 -05:00
"album_type",
"media",
"disc_count",
"genre",
"release_date",
"duration",
"bandcamp_album_id",
2022-12-16 01:08:10 -05:00
]
2023-01-05 03:06:13 -05:00
release_date = jsondata.DateField(_("发行日期"), null=True, blank=True)
2022-12-16 01:08:10 -05:00
duration = jsondata.IntegerField(_("时长"), null=True, blank=True)
2022-12-29 23:57:02 -05:00
artist = jsondata.ArrayField(
2023-01-05 03:06:13 -05:00
models.CharField(blank=True, default="", max_length=200),
verbose_name=_("艺术家"),
2022-12-29 23:57:02 -05:00
default=list,
)
genre = jsondata.CharField(_("流派"), blank=True, default="", max_length=100)
company = jsondata.ArrayField(
models.CharField(blank=True, default="", max_length=500),
2023-01-05 03:06:13 -05:00
verbose_name=_("发行方"),
2022-12-29 23:57:02 -05:00
null=True,
blank=True,
default=list,
)
2022-12-16 01:08:10 -05:00
track_list = jsondata.TextField(_("曲目"), blank=True, default="")
2023-01-05 03:06:13 -05:00
other_title = jsondata.CharField(_("其它标题"), blank=True, default="", max_length=500)
album_type = jsondata.CharField(_("专辑类型"), blank=True, default="", max_length=500)
media = jsondata.CharField(_("介质"), blank=True, default="", max_length=500)
2022-12-29 23:57:02 -05:00
bandcamp_album_id = jsondata.CharField(blank=True, default="", max_length=500)
2023-01-05 03:06:13 -05:00
disc_count = jsondata.IntegerField(_("碟片数"), blank=True, default="", max_length=500)
@classmethod
def lookup_id_type_choices(cls):
id_types = [
IdType.GTIN,
IdType.ISRC,
IdType.Spotify_Album,
IdType.Bandcamp,
IdType.DoubanMusic,
]
return [(i.value, i.label) for i in id_types]