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