diff --git a/apps/course/models/course.py b/apps/course/models/course.py index 79a7a42..7fa1fd1 100644 --- a/apps/course/models/course.py +++ b/apps/course/models/course.py @@ -119,7 +119,16 @@ class Course(models.Model): if not self.slug: self.slug = generate_slug_for_model(Course, self.title) - if self.discount_percentage > 0: + # Ensure consistency: if price is 0, set is_free to True and discount_percentage to 0 + if self.price == 0: + self.is_free = True + self.discount_percentage = 0 + self.final_price = Decimal('0.00') + elif self.is_free: + self.price = Decimal('0.00') + self.discount_percentage = 0 + self.final_price = Decimal('0.00') + elif self.discount_percentage > 0: discount_amount = (self.price * self.discount_percentage) / 100 final_price = self.price - discount_amount self.final_price = Decimal(math.ceil(final_price)).quantize(Decimal('0.00')) diff --git a/apps/course/serializers/course.py b/apps/course/serializers/course.py index 5361182..09d5308 100644 --- a/apps/course/serializers/course.py +++ b/apps/course/serializers/course.py @@ -24,9 +24,9 @@ class CourseListSerializer(serializers.ModelSerializer): thumbnail = serializers.SerializerMethodField() participant_count = serializers.SerializerMethodField() lessons_count = serializers.SerializerMethodField() - # price = serializers.SerializerMethodField() - # discount_percentage = serializers.SerializerMethodField() - # final_price = serializers.SerializerMethodField() + price = serializers.SerializerMethodField() + discount_percentage = serializers.SerializerMethodField() + final_price = serializers.SerializerMethodField() class Meta: model = Course @@ -61,15 +61,17 @@ class CourseListSerializer(serializers.ModelSerializer): return max(lessons_count, obj.lessons_count) def get_price(self, obj): - if obj.is_free: + if obj.is_free or obj.price == 0: return "0.00" return str(obj.price) def get_discount_percentage(self, obj): - return 0 if obj.is_free else obj.discount_percentage + if obj.is_free or obj.price == 0: + return 0 + return obj.discount_percentage def get_final_price(self, obj): - if obj.is_free: + if obj.is_free or obj.price == 0: return "0.00" return str(obj.final_price) @@ -217,15 +219,17 @@ class CourseDetailSerializer(serializers.ModelSerializer): return obj.participants.count() def get_price(self, obj): - if obj.is_free: + if obj.is_free or obj.price == 0: return "0.00" return str(obj.price) def get_discount_percentage(self, obj): - return 0 if obj.is_free else obj.discount_percentage + if obj.is_free or obj.price == 0: + return 0 + return obj.discount_percentage def get_final_price(self, obj): - if obj.is_free: + if obj.is_free or obj.price == 0: return "0.00" return str(obj.final_price)