This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
from rest_framework import serializers
|
||||
from .models import ESP32Config, Order, Salesperson, Service, VCCourse, ProductFeature, ServiceOrder, WeChatUser, Distributor, Withdrawal, CommissionLog, CourseEnrollment
|
||||
from .utils import get_current_wechat_user
|
||||
|
||||
class CommissionLogSerializer(serializers.ModelSerializer):
|
||||
"""
|
||||
@@ -174,6 +175,7 @@ class VCCourseSerializer(serializers.ModelSerializer):
|
||||
display_cover_image = serializers.SerializerMethodField()
|
||||
display_detail_image = serializers.SerializerMethodField()
|
||||
course_type_display = serializers.CharField(source='get_course_type_display', read_only=True)
|
||||
video_url = serializers.SerializerMethodField()
|
||||
|
||||
class Meta:
|
||||
model = VCCourse
|
||||
@@ -193,6 +195,38 @@ class VCCourseSerializer(serializers.ModelSerializer):
|
||||
return obj.detail_image.url
|
||||
return None
|
||||
|
||||
def get_video_url(self, obj):
|
||||
"""
|
||||
仅当用户已付费/报名时返回视频URL
|
||||
"""
|
||||
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:
|
||||
return obj.video_url
|
||||
|
||||
return None
|
||||
|
||||
class ESP32ConfigSerializer(serializers.ModelSerializer):
|
||||
"""
|
||||
ESP32配置序列化器
|
||||
|
||||
Reference in New Issue
Block a user