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

This commit is contained in:
jeremygan2021
2026-02-27 13:47:32 +08:00
parent f57edbd4ee
commit 357bd75f24
9 changed files with 206 additions and 44 deletions

View File

@@ -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配置序列化器