This commit is contained in:
@@ -207,6 +207,7 @@ class OrderSerializer(serializers.ModelSerializer):
|
||||
"""
|
||||
config_name = serializers.CharField(source='config.name', read_only=True)
|
||||
course_title = serializers.CharField(source='course.title', read_only=True)
|
||||
activity_title = serializers.CharField(source='activity.title', read_only=True)
|
||||
config_image = serializers.SerializerMethodField()
|
||||
salesperson_name = serializers.CharField(source='salesperson.name', read_only=True)
|
||||
salesperson_code = serializers.CharField(source='salesperson.code', read_only=True)
|
||||
@@ -215,7 +216,7 @@ class OrderSerializer(serializers.ModelSerializer):
|
||||
|
||||
class Meta:
|
||||
model = Order
|
||||
fields = ['id', 'config', 'config_name', 'config_image', 'course', 'course_title', 'quantity', 'total_price', 'status', 'created_at', 'updated_at', 'wechat_trade_no',
|
||||
fields = ['id', 'config', 'config_name', 'config_image', 'course', 'course_title', 'activity', 'activity_title', 'quantity', 'total_price', 'status', 'created_at', 'updated_at', 'wechat_trade_no',
|
||||
'customer_name', 'phone_number', 'shipping_address', 'ref_code', 'salesperson_name', 'salesperson_code', 'courier_name', 'tracking_number']
|
||||
read_only_fields = ['total_price', 'status', 'wechat_trade_no', 'created_at', 'updated_at']
|
||||
extra_kwargs = {
|
||||
@@ -230,11 +231,14 @@ class OrderSerializer(serializers.ModelSerializer):
|
||||
|
||||
config = data.get('config')
|
||||
course = data.get('course')
|
||||
activity = data.get('activity')
|
||||
|
||||
if not config and not course:
|
||||
raise serializers.ValidationError("必须选择一种商品(硬件配置或课程)")
|
||||
if not config and not course and not activity:
|
||||
raise serializers.ValidationError("必须选择一种商品(硬件配置、课程或活动)")
|
||||
|
||||
if config and course:
|
||||
# Count how many types are selected
|
||||
selected_types = sum([bool(config), bool(course), bool(activity)])
|
||||
if selected_types > 1:
|
||||
raise serializers.ValidationError("一次只能购买一种类型的商品")
|
||||
|
||||
if config and not data.get('shipping_address'):
|
||||
@@ -255,6 +259,12 @@ class OrderSerializer(serializers.ModelSerializer):
|
||||
return obj.course.cover_image_url
|
||||
if obj.course.cover_image:
|
||||
return obj.course.cover_image.url
|
||||
elif obj.activity:
|
||||
# Use activity.display_banner_url logic
|
||||
if obj.activity.banner:
|
||||
return obj.activity.banner.url
|
||||
if obj.activity.banner_url:
|
||||
return obj.activity.banner_url
|
||||
return None
|
||||
|
||||
def create(self, validated_data):
|
||||
@@ -263,6 +273,7 @@ class OrderSerializer(serializers.ModelSerializer):
|
||||
"""
|
||||
config = validated_data.get('config')
|
||||
course = validated_data.get('course')
|
||||
activity = validated_data.get('activity')
|
||||
quantity = validated_data.get('quantity', 1)
|
||||
ref_code = validated_data.pop('ref_code', None)
|
||||
|
||||
@@ -270,6 +281,8 @@ class OrderSerializer(serializers.ModelSerializer):
|
||||
validated_data['total_price'] = config.price * quantity
|
||||
elif course:
|
||||
validated_data['total_price'] = course.price * quantity
|
||||
elif activity:
|
||||
validated_data['total_price'] = activity.price * quantity
|
||||
|
||||
# 尝试关联销售员或分销员
|
||||
if ref_code:
|
||||
|
||||
Reference in New Issue
Block a user