This commit is contained in:
@@ -176,6 +176,7 @@ class VCCourseSerializer(serializers.ModelSerializer):
|
||||
display_detail_image = serializers.SerializerMethodField()
|
||||
course_type_display = serializers.CharField(source='get_course_type_display', read_only=True)
|
||||
video_url = serializers.SerializerMethodField()
|
||||
is_purchased = serializers.SerializerMethodField()
|
||||
|
||||
class Meta:
|
||||
model = VCCourse
|
||||
@@ -195,6 +196,30 @@ class VCCourseSerializer(serializers.ModelSerializer):
|
||||
return obj.detail_image.url
|
||||
return None
|
||||
|
||||
def _check_purchased(self, obj):
|
||||
request = self.context.get('request')
|
||||
if not request:
|
||||
return False
|
||||
|
||||
# 尝试获取当前用户
|
||||
user = get_current_wechat_user(request)
|
||||
if not user:
|
||||
return False
|
||||
|
||||
# 如果是管理员,视为已购买
|
||||
if user.user and user.user.is_staff:
|
||||
return True
|
||||
|
||||
# 检查是否已购买/报名 (通过已支付的订单)
|
||||
return Order.objects.filter(
|
||||
wechat_user=user,
|
||||
course=obj,
|
||||
status__in=['paid', 'shipped', 'completed']
|
||||
).exists()
|
||||
|
||||
def get_is_purchased(self, obj):
|
||||
return self._check_purchased(obj)
|
||||
|
||||
def get_video_url(self, obj):
|
||||
"""
|
||||
仅当用户已付费/报名时返回视频URL
|
||||
@@ -202,27 +227,7 @@ class VCCourseSerializer(serializers.ModelSerializer):
|
||||
if not obj.is_video_course:
|
||||
return None
|
||||
|
||||
request = self.context.get('request')
|
||||
if not request:
|
||||
return None
|
||||
|
||||
# 尝试获取当前用户
|
||||
user = get_current_wechat_user(request)
|
||||
if not user:
|
||||
return None
|
||||
|
||||
# 如果是管理员,直接返回
|
||||
if user.user and user.user.is_staff:
|
||||
return obj.video_url
|
||||
|
||||
# 检查是否已购买/报名 (通过已支付的订单)
|
||||
has_paid = Order.objects.filter(
|
||||
wechat_user=user,
|
||||
course=obj,
|
||||
status__in=['paid', 'shipped', 'completed'] # 包含所有已完成状态
|
||||
).exists()
|
||||
|
||||
if has_paid:
|
||||
if self._check_purchased(obj):
|
||||
return obj.video_url
|
||||
|
||||
return None
|
||||
|
||||
Reference in New Issue
Block a user