pdf upload
All checks were successful
Deploy to Server / deploy (push) Successful in 32s

This commit is contained in:
jeremygan2021
2026-03-22 21:15:34 +08:00
parent 0274e59fd9
commit 2e05322909
5 changed files with 130 additions and 5 deletions

View File

@@ -33,19 +33,44 @@ class CompetitionEnrollmentSerializer(serializers.ModelSerializer):
read_only_fields = ['status']
class ProjectFileSerializer(serializers.ModelSerializer):
file_url_display = serializers.SerializerMethodField()
class Meta:
model = ProjectFile
fields = ['id', 'project', 'file_type', 'file', 'file_url', 'name', 'created_at']
fields = ['id', 'project', 'file_type', 'file', 'file_url', 'name', 'created_at', 'file_url_display']
def get_file_url_display(self, obj):
if obj.file:
return obj.file.url
return obj.file_url
def validate_file(self, value):
if not value:
return value
# 50MB limit
limit_mb = 50
if value.size > limit_mb * 1024 * 1024:
raise serializers.ValidationError(f"文件大小不能超过 {limit_mb}MB")
return value
def create(self, validated_data):
file_obj = validated_data.get('file')
if file_obj:
ext = file_obj.name.split('.')[-1].lower() if '.' in file_obj.name else ''
if ext in ['ppt', 'pptx']:
validated_data['file_type'] = 'ppt'
elif ext == 'pdf':
validated_data['file_type'] = 'pdf'
elif ext in ['jpg', 'jpeg', 'png', 'gif', 'webp']:
validated_data['file_type'] = 'image'
elif ext in ['mp4', 'mov', 'avi', 'webm']:
validated_data['file_type'] = 'video'
elif ext in ['doc', 'docx']:
validated_data['file_type'] = 'doc'
if not validated_data.get('name'):
validated_data['name'] = file_obj.name
return super().create(validated_data)
class ProjectSerializer(serializers.ModelSerializer):
files = ProjectFileSerializer(many=True, read_only=True)
contestant_info = serializers.SerializerMethodField()