change review/comment/rating to include child items as well
This commit is contained in:
parent
a8f08b6c6d
commit
777ea9ad9a
7 changed files with 24 additions and 4 deletions
|
@ -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")
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -26,7 +26,6 @@
|
|||
<a href="{% url 'journal:user_profile' comment.owner.mastodon_username %}"
|
||||
class="nickname"
|
||||
title="@{{ comment.owner.mastodon_username }}">{{ comment.owner.display_name }}</a>
|
||||
{% if comment.focus_item %}<a href="{{ comment.focus_item.url }}">{{ comment.focus_item.title }}</a>{% endif %}
|
||||
</span>
|
||||
<span class="action inline">
|
||||
<span class="timestamp">
|
||||
|
@ -34,6 +33,8 @@
|
|||
{{ comment.mark.action_label }}
|
||||
</span>
|
||||
</span>
|
||||
{% if comment.focus_item %}<a href="{{ comment.focus_item.url }}">{{ comment.focus_item.title }}</a>{% endif %}
|
||||
{% if comment.item != item %}<a href="{{ comment.item.url }}">{{ comment.item.title }}</a>{% endif %}
|
||||
<div>{{ comment.html|safe }}</div>
|
||||
</section>
|
||||
{% else %}
|
||||
|
|
|
@ -30,6 +30,8 @@
|
|||
<span class="action inline">
|
||||
<span class="timestamp">{{ review.created_time|date }}</span>
|
||||
</span>
|
||||
评论
|
||||
{% if review.item != item %}<a href="{{ review.item.url }}">{{ review.item.title }}</a>{% endif %}
|
||||
<div>
|
||||
<span>
|
||||
<a href="{% url 'journal:review_retrieve' review.uuid %}">{{ review.title }}</a>
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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],
|
||||
},
|
||||
)
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Reference in a new issue