diff --git a/backend/ai_services/serializers.py b/backend/ai_services/serializers.py index 6022609..ee074fb 100644 --- a/backend/ai_services/serializers.py +++ b/backend/ai_services/serializers.py @@ -15,11 +15,14 @@ class AIEvaluationSerializer(serializers.ModelSerializer): class TranscriptionTaskSerializer(serializers.ModelSerializer): ai_evaluations = AIEvaluationSerializer(many=True, read_only=True) + project_title = serializers.CharField(source='project.title', read_only=True) class Meta: model = TranscriptionTask - fields = ['id', 'file_url', 'task_id', 'status', 'transcription', 'summary', 'error_message', 'created_at', 'updated_at', 'transcription_data', 'summary_data', 'auto_chapters_data', 'ai_evaluations'] - read_only_fields = ['id', 'file_url', 'task_id', 'status', 'transcription', 'summary', 'error_message', 'created_at', 'updated_at', 'transcription_data', 'summary_data', 'auto_chapters_data', 'ai_evaluations'] + fields = ['id', 'file_url', 'task_id', 'status', 'transcription', 'summary', 'error_message', 'created_at', 'updated_at', 'transcription_data', 'summary_data', 'auto_chapters_data', 'ai_evaluations', 'project', 'project_title'] + read_only_fields = ['id', 'file_url', 'task_id', 'status', 'transcription', 'summary', 'error_message', 'created_at', 'updated_at', 'transcription_data', 'summary_data', 'auto_chapters_data', 'ai_evaluations', 'project_title'] class TranscriptionUploadSerializer(serializers.Serializer): - file = serializers.FileField(help_text="上传的音频文件") + file = serializers.FileField(help_text="上传的音频文件", required=False) + file_url = serializers.URLField(help_text="音频文件的URL地址", required=False) + project_id = serializers.IntegerField(help_text="关联的参赛项目ID", required=False) diff --git a/backend/ai_services/views.py b/backend/ai_services/views.py index 7492b57..a0103e9 100644 --- a/backend/ai_services/views.py +++ b/backend/ai_services/views.py @@ -82,6 +82,7 @@ class TranscriptionTaskViewSet(viewsets.ModelViewSet): """ file_obj = request.FILES.get('file') file_url = request.data.get('file_url') + project_id = request.data.get('project_id') if not file_obj and not file_url: return Response({'error': '请提供文件或文件URL'}, status=status.HTTP_400_BAD_REQUEST) @@ -104,10 +105,17 @@ class TranscriptionTaskViewSet(viewsets.ModelViewSet): oss_url = file_url # 2. 创建数据库记录 - task_record = TranscriptionTask.objects.create( - file_url=oss_url, - status=TranscriptionTask.Status.PENDING - ) + task_data = { + 'file_url': oss_url, + 'status': TranscriptionTask.Status.PENDING + } + if project_id: + try: + task_data['project_id'] = int(project_id) + except (ValueError, TypeError): + pass # Ignore invalid project_id + + task_record = TranscriptionTask.objects.create(**task_data) # 3. 调用听悟接口创建任务 try: diff --git a/backend/competition/admin.py b/backend/competition/admin.py index d5da7b6..b2c03ca 100644 --- a/backend/competition/admin.py +++ b/backend/competition/admin.py @@ -59,11 +59,11 @@ class CompetitionEnrollmentAdmin(ModelAdmin): @admin.register(Project) class ProjectAdmin(ModelAdmin): - list_display = ['title', 'competition', 'contestant', 'status', 'final_score', 'created_at'] + list_display = ['id', 'title', 'competition', 'contestant', 'status', 'final_score', 'created_at'] list_filter = ['competition', 'status'] - search_fields = ['title', 'contestant__user__nickname'] + search_fields = ['id', 'title', 'contestant__user__nickname'] inlines = [ProjectFileInline] - readonly_fields = ['final_score'] + readonly_fields = ['id', 'final_score'] fieldsets = ( ('基本信息', {