lib.itmens/catalog/performance/models.py

247 lines
6.7 KiB
Python
Raw Normal View History

from catalog.common import *
from django.utils.translation import gettext_lazy as _
2023-01-05 03:06:13 -05:00
from django.db import models
2023-06-05 02:04:52 -04:00
from catalog.common.utils import DEFAULT_ITEM_COVER
class Performance(Item):
2023-06-05 02:04:52 -04:00
type = ItemType.Performance
2022-12-11 23:20:28 +00:00
category = ItemCategory.Performance
2022-12-29 23:57:02 -05:00
url_path = "performance"
2023-06-05 02:04:52 -04:00
demonstrative = _("这部剧作")
orig_title = jsondata.CharField(
verbose_name=_("原名"), blank=True, default="", max_length=500
)
2023-02-15 23:45:12 -05:00
other_title = jsondata.ArrayField(
verbose_name=_("其它标题"),
base_field=models.CharField(blank=True, default="", max_length=200),
2023-02-15 23:45:12 -05:00
null=False,
blank=False,
default=list,
)
genre = jsondata.ArrayField(
verbose_name=_("类型"),
base_field=models.CharField(blank=True, default="", max_length=200),
null=True,
blank=True,
default=list,
)
2023-06-05 02:04:52 -04:00
language = jsondata.ArrayField(
verbose_name=_("语言"),
base_field=models.CharField(blank=True, default="", max_length=200),
2023-01-05 03:06:13 -05:00
null=False,
blank=False,
default=list,
)
2023-02-15 23:45:12 -05:00
director = jsondata.ArrayField(
2023-01-05 03:06:13 -05:00
verbose_name=_("导演"),
base_field=models.CharField(),
null=False,
blank=False,
default=list,
)
2023-02-15 23:45:12 -05:00
playwright = jsondata.ArrayField(
2023-01-05 03:06:13 -05:00
verbose_name=_("编剧"),
base_field=models.CharField(),
null=False,
blank=False,
default=list,
)
2023-06-05 02:04:52 -04:00
performer = jsondata.ArrayField(
verbose_name=_("演员"),
2023-01-05 03:06:13 -05:00
base_field=models.CharField(),
null=False,
blank=False,
default=list,
)
2023-02-15 23:45:12 -05:00
composer = jsondata.ArrayField(
verbose_name=_("作曲"),
base_field=models.CharField(),
null=False,
blank=False,
default=list,
)
choreographer = jsondata.ArrayField(
verbose_name=_("编舞"),
base_field=models.CharField(),
null=False,
blank=False,
default=list,
)
troupe = jsondata.ArrayField(
verbose_name=_("剧团"),
base_field=models.CharField(),
null=False,
blank=False,
default=list,
)
2023-06-05 02:04:52 -04:00
crew = jsondata.ArrayField(
verbose_name=_("其他演职人员和团体"),
base_field=models.CharField(),
null=False,
blank=False,
default=list,
)
location = jsondata.ArrayField(
verbose_name=_("剧场空间"),
2023-02-15 23:45:12 -05:00
base_field=models.CharField(),
null=False,
blank=False,
default=list,
)
opening_date = jsondata.CharField(
verbose_name=_("演出日期"), max_length=100, null=True, blank=True
)
official_site = jsondata.CharField(
verbose_name=_("官方网站"), max_length=1000, null=True, blank=True
)
METADATA_COPY_LIST = [
"title",
"brief",
2023-06-05 02:04:52 -04:00
"orig_title",
2023-02-15 23:45:12 -05:00
"other_title",
"genre",
2023-06-05 02:04:52 -04:00
"language",
"director",
"playwright",
"performer",
"composer",
"choreographer",
"crew",
"troupe",
"location",
"opening_date",
"official_site",
]
class PerformanceProduction(Item):
type = ItemType.PerformanceProduction
category = ItemCategory.Performance
url_path = "performance/production"
demonstrative = _("这次上演")
show = models.ForeignKey(
Performance, null=True, on_delete=models.SET_NULL, related_name="productions"
)
orig_title = jsondata.CharField(
verbose_name=_("原名"), blank=True, default="", max_length=500
)
other_title = jsondata.ArrayField(
verbose_name=_("其它标题"),
base_field=models.CharField(blank=True, default="", max_length=200),
null=False,
blank=False,
default=list,
)
language = jsondata.ArrayField(
verbose_name=_("语言"),
base_field=models.CharField(blank=True, default="", max_length=200),
null=False,
blank=False,
default=list,
)
director = jsondata.ArrayField(
verbose_name=_("导演"),
base_field=models.CharField(),
null=False,
blank=False,
default=list,
)
playwright = jsondata.ArrayField(
verbose_name=_("编剧"),
base_field=models.CharField(),
null=False,
blank=False,
default=list,
)
performer = jsondata.ArrayField(
verbose_name=_("演员"),
base_field=models.CharField(),
null=False,
blank=False,
default=list,
)
composer = jsondata.ArrayField(
verbose_name=_("作曲"),
base_field=models.CharField(),
null=False,
blank=False,
default=list,
)
choreographer = jsondata.ArrayField(
verbose_name=_("编舞"),
base_field=models.CharField(),
null=False,
blank=False,
default=list,
)
troupe = jsondata.ArrayField(
verbose_name=_("剧团"),
base_field=models.CharField(),
null=False,
blank=False,
default=list,
)
crew = jsondata.ArrayField(
verbose_name=_("其他演职人员和团体"),
base_field=models.CharField(),
null=False,
blank=False,
default=list,
)
location = jsondata.ArrayField(
verbose_name=_("剧场空间"),
base_field=models.CharField(),
null=False,
blank=False,
default=list,
)
opening_date = jsondata.CharField(
verbose_name=_("演出日期"), max_length=100, null=True, blank=True
)
official_site = jsondata.CharField(
verbose_name=_("官方网站"), max_length=1000, null=True, blank=True
)
METADATA_COPY_LIST = [
"title",
"brief",
"orig_title",
"other_title",
"language",
2023-02-15 23:45:12 -05:00
"director",
"playwright",
2023-06-05 02:04:52 -04:00
"performer",
2023-02-15 23:45:12 -05:00
"composer",
"choreographer",
2023-06-05 02:04:52 -04:00
"crew",
2023-02-15 23:45:12 -05:00
"troupe",
2023-06-05 02:04:52 -04:00
"location",
2023-02-15 23:45:12 -05:00
"opening_date",
"official_site",
]
2023-06-05 02:04:52 -04:00
@property
def parent_item(self):
return self.show
@property
2023-06-05 02:46:26 -04:00
def display_title(self):
2023-06-05 02:04:52 -04:00
return f"{self.show.title} {self.title}"
@property
def cover_image_url(self):
return (
self.cover_image_url
if self.cover and self.cover != DEFAULT_ITEM_COVER
else self.show.cover_image_url
)
def update_linked_items_from_external_resource(self, resource):
for r in resource.required_resources:
if r["model"] == "Performance":
resource = ExternalResource.objects.filter(
id_type=r["id_type"], id_value=r["id_value"]
).first()
if resource and resource.item:
self.show = resource.item