diff --git a/catalog/common/models.py b/catalog/common/models.py
index d99a3098..2528a120 100644
--- a/catalog/common/models.py
+++ b/catalog/common/models.py
@@ -308,6 +308,10 @@ class Item(SoftDeleteMixin, PolymorphicModel):
def parent_item(self):
return None
+ @property
+ def child_items(self):
+ return []
+
def set_parent_item(self, value):
raise ValueError("cannot set parent item")
diff --git a/catalog/performance/models.py b/catalog/performance/models.py
index 78c47ea4..d231774b 100644
--- a/catalog/performance/models.py
+++ b/catalog/performance/models.py
@@ -225,6 +225,10 @@ class Performance(Item):
def crew_by_role(self):
return _crew_by_role(self.crew)
+ @property
+ def child_items(self):
+ return self.all_productions
+
class PerformanceProduction(Item):
type = ItemType.PerformanceProduction
diff --git a/catalog/templates/item_comments.html b/catalog/templates/item_comments.html
index f957a598..c4118b0b 100644
--- a/catalog/templates/item_comments.html
+++ b/catalog/templates/item_comments.html
@@ -26,7 +26,6 @@
{{ comment.owner.display_name }}
- {% if comment.focus_item %}{{ comment.focus_item.title }}{% endif %}
@@ -34,6 +33,8 @@
{{ comment.mark.action_label }}
+ {% if comment.focus_item %}{{ comment.focus_item.title }}{% endif %}
+ {% if comment.item != item %}{{ comment.item.title }}{% endif %}
{{ comment.html|safe }}
{% else %}
diff --git a/catalog/templates/item_reviews.html b/catalog/templates/item_reviews.html
index 99ad4075..67c54ffb 100644
--- a/catalog/templates/item_reviews.html
+++ b/catalog/templates/item_reviews.html
@@ -30,6 +30,8 @@
{{ review.created_time|date }}
+ 评论
+ {% if review.item != item %}{{ review.item.title }}{% endif %}
{{ review.title }}
diff --git a/catalog/tv/models.py b/catalog/tv/models.py
index e0c7b064..2a4498cd 100644
--- a/catalog/tv/models.py
+++ b/catalog/tv/models.py
@@ -210,6 +210,10 @@ class TVShow(Item):
.filter(is_deleted=False, merged_to_item=None)
)
+ @property
+ def child_items(self):
+ return self.all_seasons
+
class TVSeason(Item):
type = ItemType.TVSeason
diff --git a/catalog/views.py b/catalog/views.py
index 69caab1a..f6d9e3ca 100644
--- a/catalog/views.py
+++ b/catalog/views.py
@@ -371,7 +371,8 @@ def comments(request, item_path, item_uuid):
item = get_object_or_404(Item, uid=get_uuid_or_404(item_uuid))
if not item:
raise Http404()
- queryset = Comment.objects.filter(item=item).order_by("-created_time")
+ ids = [i.id for i in item.child_items] + [item.id]
+ queryset = Comment.objects.filter(item_id__in=ids).order_by("-created_time")
queryset = queryset.filter(query_visible(request.user))
before_time = request.GET.get("last")
if before_time:
@@ -380,6 +381,7 @@ def comments(request, item_path, item_uuid):
request,
"item_comments.html",
{
+ "item": item,
"comments": queryset[:11],
},
)
@@ -390,7 +392,8 @@ def reviews(request, item_path, item_uuid):
item = get_object_or_404(Item, uid=get_uuid_or_404(item_uuid))
if not item:
raise Http404()
- queryset = Review.objects.filter(item=item).order_by("-created_time")
+ ids = [i.id for i in item.child_items] + [item.id]
+ queryset = Review.objects.filter(item_id__in=ids).order_by("-created_time")
queryset = queryset.filter(query_visible(request.user))
before_time = request.GET.get("last")
if before_time:
@@ -399,6 +402,7 @@ def reviews(request, item_path, item_uuid):
request,
"item_reviews.html",
{
+ "item": item,
"reviews": queryset[:11],
},
)
diff --git a/journal/models.py b/journal/models.py
index 6a25a674..ac52fc32 100644
--- a/journal/models.py
+++ b/journal/models.py
@@ -333,7 +333,8 @@ class Rating(Content):
@staticmethod
def get_rating_for_item(item):
- stat = Rating.objects.filter(item=item, grade__isnull=False).aggregate(
+ ids = [i.id for i in item.child_items] + [item.id]
+ stat = Rating.objects.filter(item_id__in=ids, grade__isnull=False).aggregate(
average=Avg("grade"), count=Count("item")
)
return round(stat["average"], 1) if stat["count"] >= MIN_RATING_COUNT else None