1
0
forked from erp-dev/erp

feat: upload api

This commit is contained in:
2025-11-17 14:34:09 +08:00
parent dff9151651
commit d23db848ec
16 changed files with 1183 additions and 29 deletions

View File

@@ -3,6 +3,7 @@ from decimal import Decimal
from typing import List, Dict, Any
from stock import models as stock_models
from basic_info import models as basic_info_models
from . import models as api_models
class ProductStockChangeSerializer(serializers.Serializer):
@@ -90,4 +91,47 @@ class SetMerchantAutoCompleteStockChangeSerializer(serializers.Serializer):
"""设置商户自动确认库存变动序列化器"""
auto_complete = serializers.BooleanField(
help_text="是否自动确认库存变动"
)
)
# ==================== 通用文件上传序列化器 ====================
class UploadedFileSerializer(serializers.ModelSerializer):
"""上传文件序列化器"""
file_url = serializers.SerializerMethodField()
owner_username = serializers.CharField(source='owner.username', read_only=True)
class Meta:
model = api_models.UploadedFile
fields = [
'id', 'path', 'file_url', 'original_filename', 'file_size',
'content_type', 'owner', 'owner_username', 'is_deleted',
'created_at', 'updated_at'
]
read_only_fields = ['id', 'owner', 'file_size', 'content_type', 'created_at', 'updated_at']
def get_file_url(self, obj):
"""获取文件完整URL"""
if obj.path:
request = self.context.get('request')
if request:
return request.build_absolute_uri(obj.path.url)
return obj.path.url
return None
class FileUploadSerializer(serializers.Serializer):
"""文件上传请求序列化器"""
file = serializers.FileField(
required=True,
help_text='要上传的文件'
)
def validate_file(self, value):
"""验证文件"""
# 限制文件大小为 100MB
max_size = 100 * 1024 * 1024
if value.size > max_size:
raise serializers.ValidationError(f'文件大小不能超过 {max_size // (1024*1024)}MB')
return value