lib.itmens/catalog/movie/models.py

175 lines
5 KiB
Python
Raw Normal View History

2022-12-15 17:29:35 -05:00
from django.db import models
from django.utils.translation import gettext_lazy as _
from catalog.common.models import *
2023-02-15 15:45:57 -05:00
class MovieInSchema(ItemInSchema):
orig_title: str | None = None
other_title: list[str]
2023-02-15 15:45:57 -05:00
director: list[str]
playwright: list[str]
actor: list[str]
genre: list[str]
language: list[str]
area: list[str]
year: int | None = None
site: str | None = None
2023-02-22 14:20:20 -05:00
duration: str | None = None
2023-02-15 15:45:57 -05:00
class MovieSchema(MovieInSchema, BaseSchema):
2023-02-15 16:22:32 -05:00
imdb: str | None = None
2023-02-15 15:45:57 -05:00
pass
class Movie(Item):
2023-06-05 02:04:52 -04:00
type = ItemType.Movie
2022-12-11 23:20:28 +00:00
category = ItemCategory.Movie
2022-12-29 23:57:02 -05:00
url_path = "movie"
imdb = PrimaryLookupIdDescriptor(IdType.IMDB)
tmdb_movie = PrimaryLookupIdDescriptor(IdType.TMDB_Movie)
douban_movie = PrimaryLookupIdDescriptor(IdType.DoubanMovie)
2022-12-29 23:57:02 -05:00
demonstrative = _("这部电影")
2022-12-15 17:29:35 -05:00
METADATA_COPY_LIST = [
2022-12-29 23:57:02 -05:00
"title",
"orig_title",
"other_title",
"director",
"playwright",
"actor",
"genre",
"showtime",
"site",
"area",
"language",
"year",
"duration",
2023-01-05 03:06:13 -05:00
# "season_number",
# "episodes",
# "single_episode_length",
2022-12-29 23:57:02 -05:00
"brief",
2022-12-15 17:29:35 -05:00
]
2022-12-29 23:57:02 -05:00
orig_title = jsondata.CharField(
2023-01-05 03:06:13 -05:00
verbose_name=_("原始标题"), blank=True, default="", max_length=500
2022-12-29 23:57:02 -05:00
)
other_title = jsondata.ArrayField(
verbose_name=_("其它标题"),
base_field=models.CharField(blank=True, default="", max_length=200),
null=True,
blank=True,
default=list,
2022-12-29 23:57:02 -05:00
)
director = jsondata.ArrayField(
2023-01-05 03:06:13 -05:00
verbose_name=_("导演"),
base_field=models.CharField(blank=True, default="", max_length=200),
2022-12-29 23:57:02 -05:00
null=True,
blank=True,
default=list,
)
playwright = jsondata.ArrayField(
2023-01-05 03:06:13 -05:00
verbose_name=_("编剧"),
base_field=models.CharField(blank=True, default="", max_length=200),
2022-12-29 23:57:02 -05:00
null=True,
blank=True,
default=list,
)
actor = jsondata.ArrayField(
2023-01-05 03:06:13 -05:00
verbose_name=_("演员"),
base_field=models.CharField(blank=True, default="", max_length=200),
2022-12-29 23:57:02 -05:00
null=True,
blank=True,
default=list,
)
genre = jsondata.ArrayField(
2023-01-05 03:06:13 -05:00
verbose_name=_("类型"),
base_field=models.CharField(blank=True, default="", max_length=50),
2022-12-29 23:57:02 -05:00
null=True,
blank=True,
default=list,
) # , choices=MovieGenreEnum.choices
2023-01-05 03:06:13 -05:00
showtime = jsondata.JSONField(
_("上映日期"),
2022-12-29 23:57:02 -05:00
null=True,
blank=True,
default=list,
schema={
2023-06-07 04:14:38 -04:00
"type": "list",
"items": {
"type": "dict",
"additionalProperties": False,
"keys": {
"time": {
"type": "string",
"title": _("日期"),
"placeholder": _("必填"),
},
"region": {
"type": "string",
"title": _("区域或类型"),
"placeholder": _("如中国大陆或柏林电影节"),
},
},
"required": ["time"],
},
},
2022-12-29 23:57:02 -05:00
)
2023-01-05 03:06:13 -05:00
site = jsondata.URLField(
verbose_name=_("官方网站"), blank=True, default="", max_length=200
)
2022-12-29 23:57:02 -05:00
area = jsondata.ArrayField(
2023-01-05 03:06:13 -05:00
verbose_name=_("国家地区"),
base_field=models.CharField(
2022-12-29 23:57:02 -05:00
blank=True,
default="",
max_length=100,
),
null=True,
blank=True,
default=list,
)
language = jsondata.ArrayField(
2023-01-05 03:06:13 -05:00
verbose_name=_("语言"),
base_field=models.CharField(
2022-12-29 23:57:02 -05:00
blank=True,
default="",
max_length=100,
),
null=True,
blank=True,
default=list,
)
2023-01-05 03:06:13 -05:00
year = jsondata.IntegerField(verbose_name=_("年份"), null=True, blank=True)
duration = jsondata.CharField(
verbose_name=_("片长"), blank=True, default="", max_length=200
)
season_number = jsondata.IntegerField(
null=True, blank=True
) # TODO remove after migration
episodes = jsondata.IntegerField(
null=True, blank=True
) # TODO remove after migration
single_episode_length = jsondata.IntegerField(
null=True, blank=True
) # TODO remove after migration
@classmethod
def lookup_id_type_choices(cls):
id_types = [
IdType.IMDB,
IdType.TMDB_Movie,
IdType.DoubanMovie,
IdType.Bangumi,
]
return [(i.value, i.label) for i in id_types]
@classmethod
def lookup_id_cleanup(cls, lookup_id_type, lookup_id_value):
if lookup_id_type == IdType.IMDB.value and lookup_id_value:
if lookup_id_value[:2] == "tt":
return lookup_id_type, lookup_id_value
else:
return None, None
return super().lookup_id_cleanup(lookup_id_type, lookup_id_value)