From 10a92aeeed0f49f0802b1adee1815d4d6316e55d Mon Sep 17 00:00:00 2001 From: Parsa Nazer Date: Thu, 14 May 2026 16:41:57 +0330 Subject: [PATCH] add user rating logic to dynamic product serializer for its instace view type --- backend/product/serializers.py | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/backend/product/serializers.py b/backend/product/serializers.py index cacd638..d1e5d65 100644 --- a/backend/product/serializers.py +++ b/backend/product/serializers.py @@ -159,7 +159,7 @@ class DynamicProductSerializer(serializers.ModelSerializer): customer_pickup_title = serializers.SerializerMethodField() customer_pickup_description = serializers.SerializerMethodField() average_rating = serializers.SerializerMethodField() - + user_rating = serializers.SerializerMethodField() def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) view_type = self.context.get('view_type', 'all') @@ -177,10 +177,21 @@ class DynamicProductSerializer(serializers.ModelSerializer): view_type = { 'list': ['id', 'name', 'rating', 'slug', 'category', 'colors', 'image', 'best_deal_price_before_discount', 'best_deal_price_after_discount', 'best_deal_discount', 'main_image', 'average_rating'], 'slider': ['id', 'name', 'rating', 'slug', 'category', 'variants', 'colors', 'image', 'best_deal_price_before_discount', 'best_deal_price_after_discount', 'best_deal_discount', 'average_rating'], - 'instance': ['id', 'name', 'description', 'rating', 'slug', 'meta_description', 'meta_keywords', 'meta_rating', 'category', 'related_products', 'in_pack_items', 'variants', 'colors', 'added_to_favorites', 'image', 'customer_pickup_title', 'customer_pickup_description', 'average_rating'], + 'instance': ['id', 'name', 'description', 'rating', 'slug', 'meta_description', 'meta_keywords', 'meta_rating', 'category', 'related_products', 'in_pack_items', 'variants', 'colors', 'added_to_favorites', 'image', 'customer_pickup_title', 'customer_pickup_description', 'average_rating', 'user_rating'], 'chat': ['id', 'name', 'description', 'variants', 'image'] } + + def get_user_rating(self, obj): + request = self.context.get('request') + if not request.user.is_authenticated: + return None + product_ratings = obj.ratings.all() + if product_ratings.filter(user=request.user).exists(): + return product_ratings.filter(user=request.user).first().rating + else: + return None + def _get_best_deal_variant(self, obj): """Get best deal variant from prefetched variants (pre-ordered by discount/price)""" if not hasattr(self, '_best_deal_cache'):