first commit

This commit is contained in:
renjianbo
2026-01-09 18:28:10 +08:00
parent 8ca573e948
commit 5cc088a210
134 changed files with 8730 additions and 0 deletions

46
utils/upload_questions.py Normal file
View File

@@ -0,0 +1,46 @@
import xlrd # xlrd库
from django.db import transaction # 数据库事物
from competition.models import ChoiceInfo, FillInBlankInfo # 题目数据模型
def check_vals(val): # 检查值是否被转换成float如果是将.0结尾去掉
val = str(val)
if val.endswith('.0'):
val = val[:-2]
return val
@transaction.atomic
def upload_questions(file_path=None, bank_info=None):
book = xlrd.open_workbook(file_path) # 读取文件
table = book.sheets()[0] # 获取第一张表
nrows = table.nrows # 获取行数
choice_num = 0 # 选择题数量
fillinblank_num = 0 # 填空题数量
for i in range(1, nrows):
rvalues = table.row_values(i) # 获取行中的值
if (not rvalues[0]) or rvalues[0].startswith('说明'): # 取出多余行
break
if '##' in rvalues[0]: # 选择题
FillInBlankInfo.objects.select_for_update().create(
bank_id=bank_info.bank_id,
question=check_vals(rvalues[0]),
answer=check_vals(rvalues[1]),
image_url=rvalues[6],
source=rvalues[7]
)
fillinblank_num += 1 # 填空题数加1
else: # 填空题
ChoiceInfo.objects.select_for_update().create(
bank_id=bank_info.bank_id,
question=check_vals(rvalues[0]),
answer=check_vals(rvalues[1]),
item1=check_vals(rvalues[2]),
item2=check_vals(rvalues[3]),
item3=check_vals(rvalues[4]),
item4=check_vals(rvalues[5]),
image_url=rvalues[6],
source=rvalues[7]
)
choice_num += 1 # 选择题数加1
bank_info.choice_num = choice_num
bank_info.fillinblank_num = fillinblank_num
bank_info.save()
return choice_num, fillinblank_num