video curcse
All checks were successful
Deploy to Server / deploy (push) Successful in 36s

This commit is contained in:
jeremygan2021
2026-02-27 14:18:18 +08:00
parent a47be29bf1
commit 27dcbef7d5
6 changed files with 93 additions and 32 deletions

View File

@@ -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