adjust fields for performance

This commit is contained in:
Your Name 2023-06-05 11:45:57 -04:00 committed by Henri Dickson
parent 0162182407
commit 90efb66b7a
5 changed files with 97 additions and 62 deletions

View file

@ -17,81 +17,84 @@ class Performance(Item):
verbose_name=_("其它标题"),
base_field=models.CharField(blank=True, default="", max_length=200),
null=False,
blank=False,
blank=True,
default=list,
)
genre = jsondata.ArrayField(
verbose_name=_("类型"),
base_field=models.CharField(blank=True, default="", max_length=200),
null=True,
blank=True,
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,
blank=True,
default=list,
)
director = jsondata.ArrayField(
verbose_name=_("导演"),
base_field=models.CharField(),
base_field=models.CharField(blank=True, default="", max_length=500),
null=False,
blank=False,
blank=True,
default=list,
)
playwright = jsondata.ArrayField(
verbose_name=_("编剧"),
base_field=models.CharField(),
base_field=models.CharField(blank=True, default="", max_length=500),
null=False,
blank=False,
default=list,
)
performer = jsondata.ArrayField(
verbose_name=_("演员"),
base_field=models.CharField(),
null=False,
blank=False,
blank=True,
default=list,
)
composer = jsondata.ArrayField(
verbose_name=_("作曲"),
base_field=models.CharField(),
base_field=models.CharField(blank=True, default="", max_length=500),
null=False,
blank=False,
blank=True,
default=list,
)
choreographer = jsondata.ArrayField(
verbose_name=_("编舞"),
base_field=models.CharField(),
base_field=models.CharField(blank=True, default="", max_length=500),
null=False,
blank=False,
blank=True,
default=list,
)
performer = jsondata.ArrayField(
verbose_name=_("演员"),
base_field=models.CharField(blank=True, default="", max_length=500),
null=False,
blank=True,
default=list,
)
troupe = jsondata.ArrayField(
verbose_name=_("剧团"),
base_field=models.CharField(),
base_field=models.CharField(blank=True, default="", max_length=500),
null=False,
blank=False,
blank=True,
default=list,
)
crew = jsondata.ArrayField(
verbose_name=_("其他演职人员和团体"),
base_field=models.CharField(),
base_field=models.CharField(blank=True, default="", max_length=500),
null=False,
blank=False,
blank=True,
default=list,
)
location = jsondata.ArrayField(
verbose_name=_("剧场空间"),
base_field=models.CharField(),
base_field=models.CharField(blank=True, default="", max_length=500),
null=False,
blank=False,
blank=True,
default=list,
)
opening_date = jsondata.CharField(
verbose_name=_("演出日期"), max_length=100, null=True, blank=True
verbose_name=_("首演日期"), max_length=100, null=True, blank=True
)
closing_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
@ -112,6 +115,7 @@ class Performance(Item):
"troupe",
"location",
"opening_date",
"closing_date",
"official_site",
]
@ -119,7 +123,7 @@ class Performance(Item):
def all_productions(self):
return (
self.productions.all()
.order_by("title")
.order_by("metadata__opening_date")
.filter(is_deleted=False, merged_to_item=None)
)
@ -139,74 +143,77 @@ class PerformanceProduction(Item):
verbose_name=_("其它标题"),
base_field=models.CharField(blank=True, default="", max_length=200),
null=False,
blank=False,
blank=True,
default=list,
)
language = jsondata.ArrayField(
verbose_name=_("语言"),
base_field=models.CharField(blank=True, default="", max_length=200),
null=False,
blank=False,
blank=True,
default=list,
)
director = jsondata.ArrayField(
verbose_name=_("导演"),
base_field=models.CharField(),
base_field=models.CharField(blank=True, default="", max_length=500),
null=False,
blank=False,
blank=True,
default=list,
)
playwright = jsondata.ArrayField(
verbose_name=_("编剧"),
base_field=models.CharField(),
base_field=models.CharField(blank=True, default="", max_length=500),
null=False,
blank=False,
default=list,
)
performer = jsondata.ArrayField(
verbose_name=_("演员"),
base_field=models.CharField(),
null=False,
blank=False,
blank=True,
default=list,
)
composer = jsondata.ArrayField(
verbose_name=_("作曲"),
base_field=models.CharField(),
base_field=models.CharField(blank=True, default="", max_length=500),
null=False,
blank=False,
blank=True,
default=list,
)
choreographer = jsondata.ArrayField(
verbose_name=_("编舞"),
base_field=models.CharField(),
base_field=models.CharField(blank=True, default="", max_length=500),
null=False,
blank=False,
blank=True,
default=list,
)
performer = jsondata.ArrayField(
verbose_name=_("演员"),
base_field=models.CharField(blank=True, default="", max_length=500),
null=False,
blank=True,
default=list,
)
troupe = jsondata.ArrayField(
verbose_name=_("剧团"),
base_field=models.CharField(),
base_field=models.CharField(blank=True, default="", max_length=500),
null=False,
blank=False,
blank=True,
default=list,
)
crew = jsondata.ArrayField(
verbose_name=_("其他演职人员和团体"),
base_field=models.CharField(),
base_field=models.CharField(blank=True, default="", max_length=500),
null=False,
blank=False,
blank=True,
default=list,
)
location = jsondata.ArrayField(
verbose_name=_("剧场空间"),
base_field=models.CharField(),
base_field=models.CharField(blank=True, default="", max_length=500),
null=False,
blank=False,
blank=True,
default=list,
)
opening_date = jsondata.CharField(
verbose_name=_("演出日期"), max_length=100, null=True, blank=True
verbose_name=_("首演日期"), max_length=100, null=True, blank=False
)
closing_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
@ -226,6 +233,7 @@ class PerformanceProduction(Item):
"troupe",
"location",
"opening_date",
"closing_date",
"official_site",
]

View file

@ -75,6 +75,12 @@ class DoubanDramaTestCase(TestCase):
crawl_related_resources_task(resource.id) # force the async job to run now
productions = list(item.productions.all())
self.assertEqual(len(productions), 4)
self.assertEqual(productions[0].opening_date, "2008-06-20")
self.assertEqual(productions[0].closing_date, "2008-08-04")
self.assertEqual(productions[2].opening_date, "2017-03-10")
self.assertEqual(productions[2].closing_date, "2017-03-17")
self.assertEqual(productions[3].opening_date, "2017-11-13")
self.assertEqual(productions[3].closing_date, None)
self.assertEqual(productions[3].title, "ミュージカル2017年")
self.assertEqual(len(productions[3].performer), 6)
self.assertEqual(productions[3].language, ["日语"])

View file

@ -70,6 +70,12 @@ class DoubanDramaVersion(AbstractSite):
"troupe": [x.strip() for x in h.xpath(q.format("演出团体"))],
"location": [x.strip() for x in h.xpath(q.format("演出剧院"))],
}
if data["opening_date"]:
d = data["opening_date"].split("-")
l = len(d) if len(d) < 6 else 6
if l > 3:
data["opening_date"] = "-".join(d[:3])
data["closing_date"] = "-".join(d[0 : 6 - l] + d[3:l])
img_url_elem = h.xpath("//img[@itemprop='image']/@src")
data["cover_image_url"] = img_url_elem[0].strip() if img_url_elem else None
pd = ResourceContent(metadata=data)
@ -135,7 +141,7 @@ class DoubanDrama(AbstractSite):
data["genre"] = [
s.strip()
for s in h.xpath(
"//dl//dt[text()='类型:']/following-sibling::dd[@itemprop='genre']/text()"
"//div[@class='meta']//dl//dt[text()='类型:']/following-sibling::dd[@itemprop='genre']/text()"
)
]
# data["version"] = [
@ -181,8 +187,16 @@ class DoubanDrama(AbstractSite):
)
]
date_elem = h.xpath("//dl//dt[text()='演出日期:']/following::dd/text()")
date_elem = h.xpath(
"//div[@class='meta']//dl//dt[text()='演出日期:']/following::dd/text()"
)
data["opening_date"] = date_elem[0] if date_elem else None
if data["opening_date"]:
d = data["opening_date"].split("-")
l = len(d) if len(d) < 6 else 6
if l > 3:
data["opening_date"] = "-".join(d[:3])
data["closing_date"] = "-".join(d[0 : 6 - l] + d[3:l])
data["location"] = [
s.strip()

View file

@ -12,13 +12,16 @@
<!-- class specific details -->
{% block details %}
<div>{% include '_people.html' with people=item.other_title _role='其他标题' max=5 %}</div>
<div>
{% if item.opening_date %}
<span>{{ item.opening_date }}</span>
{% if item.closing_date %}~ <span>{{ item.closing_date }}</span>{% endif %}
{% endif %}
</div>
<div>{% include '_people.html' with people=item.genre role='类型' max=5 %}</div>
<div>{% include '_people.html' with people=item.troupe role='剧团' max=5 %}</div>
<div>{% include '_people.html' with people=item.location role='剧院' max=5 %}</div>
<div>{% include '_people.html' with people=item.language role='语言' max=5 %}</div>
<div>
{% if item.opening_date %}日期: <span>{{ item.opening_date }}</span>{% endif %}
</div>
<div>{% include '_people.html' with people=item.director role='导演' max=5 %}</div>
<div>{% include '_people.html' with people=item.playwright role='编剧' max=5 %}</div>
<div>{% include '_people.html' with people=item.performer role='演员' max=10 %}</div>
@ -42,10 +45,11 @@
<a href="{{ prod.url }}">{{ prod.title }}</a>
</h6>
<div>
{% if prod.opening_date %}
<span>{{ prod.opening_date }}</span>
{% if prod.closing_date %}~ <span>{{ prod.closing_date }}</span>{% endif %}
{% endif %}
{% include '_people.html' with people=prod.troupe _role='剧团' max=2 %}
<div>
{% if prod.opening_date %}上演日期:{{ prod.opening_date }}{% endif %}
</div>
{% include '_people.html' with people=prod.location _role='上演剧院' max=2 %}
{% include '_people.html' with people=prod.language _role='语言' max=5 %}
</div>

View file

@ -11,6 +11,12 @@
{% load thumb %}
<!-- class specific details -->
{% block details %}
<div>
{% if item.opening_date %}
<span>{{ item.opening_date }}</span>
{% if item.closing_date %}~ <span>{{ item.closing_date }}</span>{% endif %}
{% endif %}
</div>
<div>
{% if item.show %}
{% trans '所属剧目' %} <span><a href="{{ item.show.url }}"></span>{{ item.show.title }}</a>
@ -21,9 +27,6 @@
<div>{% include '_people.html' with people=item.troupe role='剧团' max=5 %}</div>
<div>{% include '_people.html' with people=item.location role='剧院' max=5 %}</div>
<div>{% include '_people.html' with people=item.language role='语言' max=5 %}</div>
<div>
{% if item.opening_date %}日期: <span>{{ item.opening_date }}</span>{% endif %}
</div>
<div>{% include '_people.html' with people=item.director role='导演' max=5 %}</div>
<div>{% include '_people.html' with people=item.playwright role='编剧' max=5 %}</div>
<div>{% include '_people.html' with people=item.performer role='演员' max=10 %}</div>