comment rate added to serilizer and user detail added too
This commit is contained in:
@@ -590,8 +590,30 @@ class CommentView(APIView):
|
||||
).select_related('user')
|
||||
paginator = self.pagination_class()
|
||||
paginated_comments = paginator.paginate_queryset(comments, request)
|
||||
|
||||
# OPTIMIZATION: Fetch all user ratings in a single query
|
||||
# Get user IDs from paginated comments to only fetch ratings for displayed comments
|
||||
user_ids = [comment.user_id for comment in paginated_comments]
|
||||
|
||||
# Single query to get all ratings for these users on this product
|
||||
user_ratings = ProductRating.objects.filter(
|
||||
product=product,
|
||||
user_id__in=user_ids
|
||||
).values_list('user_id', 'rating')
|
||||
|
||||
# Build cache dictionary for O(1) lookups in serializer
|
||||
user_ratings_cache = {user_id: rating for user_id, rating in user_ratings}
|
||||
|
||||
# Pass cache to serializer context to avoid N queries
|
||||
comments_ser = self.serializer_class(
|
||||
instance=paginated_comments, many=True)
|
||||
instance=paginated_comments,
|
||||
many=True,
|
||||
context={
|
||||
'request': request,
|
||||
'user_ratings_cache': user_ratings_cache,
|
||||
'product': product
|
||||
}
|
||||
)
|
||||
return paginator.get_paginated_response(comments_ser.data)
|
||||
|
||||
def post(self, request, slug):
|
||||
|
||||
Reference in New Issue
Block a user