日常修复内容
This commit is contained in:
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -105,6 +105,10 @@ class GenerateControllerBG(ControllerBase):
|
|||||||
language_list = []
|
language_list = []
|
||||||
for language in languages:
|
for language in languages:
|
||||||
language_list.append(language.get('ident_version'))
|
language_list.append(language.get('ident_version'))
|
||||||
|
runtimes = get_list_dict('runtime', project_obj.runtime)
|
||||||
|
runtime_list = [item['ident_version'] for item in runtimes]
|
||||||
|
devplants = get_list_dict('devplant', project_obj.devplant)
|
||||||
|
devplant_list = [item['ident_version'] for item in devplants]
|
||||||
|
|
||||||
# 获取轮次
|
# 获取轮次
|
||||||
rounds = project_obj.pField.all()
|
rounds = project_obj.pField.all()
|
||||||
@@ -112,7 +116,7 @@ class GenerateControllerBG(ControllerBase):
|
|||||||
for r in rounds:
|
for r in rounds:
|
||||||
round_dict = {}
|
round_dict = {}
|
||||||
# 获取SO的dut
|
# 获取SO的dut
|
||||||
so_dut: Dut = r.rdField.filter(type='SO').first()
|
so_dut: Dut | None = r.rdField.filter(type='SO').first()
|
||||||
if so_dut:
|
if so_dut:
|
||||||
round_dict['version'] = so_dut.version
|
round_dict['version'] = so_dut.version
|
||||||
round_dict['line_count'] = int(so_dut.total_lines)
|
round_dict['line_count'] = int(so_dut.total_lines)
|
||||||
@@ -123,8 +127,8 @@ class GenerateControllerBG(ControllerBase):
|
|||||||
'project_name': project_obj.name,
|
'project_name': project_obj.name,
|
||||||
'soft_type': project_obj.get_soft_type_display(),
|
'soft_type': project_obj.get_soft_type_display(),
|
||||||
'security_level': get_str_dict(project_obj.security_level, 'security_level'),
|
'security_level': get_str_dict(project_obj.security_level, 'security_level'),
|
||||||
'runtime': get_str_dict(project_obj.runtime, 'runtime'),
|
'runtime': "\a".join(runtime_list),
|
||||||
'devplant': get_str_dict(project_obj.devplant, 'devplant'),
|
'devplant': "\a".join(devplant_list),
|
||||||
'language': "\a".join(language_list),
|
'language': "\a".join(language_list),
|
||||||
'recv_date': project_obj.beginTime.strftime("%Y-%m-%d"),
|
'recv_date': project_obj.beginTime.strftime("%Y-%m-%d"),
|
||||||
'dev_unit': project_obj.dev_unit,
|
'dev_unit': project_obj.dev_unit,
|
||||||
|
|||||||
@@ -472,51 +472,68 @@ class GenerateControllerDG(ControllerBase, FragementToolsMixin):
|
|||||||
# 通用生成静态软件项、静态硬件项、动态软件项、动态硬件信息的context,包含fontnote和table
|
# 通用生成静态软件项、静态硬件项、动态软件项、动态硬件信息的context,包含fontnote和table
|
||||||
@classmethod
|
@classmethod
|
||||||
def create_table_context(cls, table_data: list[list[str]], doc: DocxTemplate):
|
def create_table_context(cls, table_data: list[list[str]], doc: DocxTemplate):
|
||||||
"""注意:该函数会增加一列序号列"""
|
"""注意:该函数会增加一列序号列,并且支持单元格内回车换行(段落换行)"""
|
||||||
subdoc = doc.new_subdoc()
|
subdoc = doc.new_subdoc()
|
||||||
rows = len(table_data)
|
rows = len(table_data)
|
||||||
cols = len(table_data[0]) + 1 # 多渲染一个序号列
|
cols = len(table_data[0]) + 1
|
||||||
table = subdoc.add_table(rows=rows, cols=cols)
|
table = subdoc.add_table(rows=rows, cols=cols)
|
||||||
|
|
||||||
# 单元格处理
|
# 单元格处理
|
||||||
for row in range(rows):
|
for row in range(rows):
|
||||||
for col in range(cols):
|
for col in range(cols):
|
||||||
cell = table.cell(row, col) # 单元格数据
|
cell = table.cell(row, col)
|
||||||
# 设置边距 - 所有单元格
|
|
||||||
set_cell_margins(cell, left=100, right=100, top=100, bottom=100)
|
set_cell_margins(cell, left=100, right=100, top=100, bottom=100)
|
||||||
pa = cell.paragraphs[0]
|
|
||||||
# 处理第一列 - 要居中
|
# 获取要显示的文本内容(字符串或按行拆分后的列表)
|
||||||
if col == 0:
|
if col == 0:
|
||||||
if row == 0:
|
# 序号列
|
||||||
cell.text = "序号"
|
lines = ["序号"] if row == 0 else [str(row)]
|
||||||
else:
|
else:
|
||||||
cell.text = str(row)
|
raw_text = table_data[row][col - 1]
|
||||||
pa.alignment = WD_ALIGN_PARAGRAPH.CENTER
|
# 按换行符 \n 拆分为多个段落
|
||||||
# 处理非第一列
|
lines = raw_text.split('\n') if raw_text else ['']
|
||||||
else:
|
|
||||||
cell.text = table_data[row][col - 1]
|
# 清空单元格原有段落(add_table 默认有一个段落)
|
||||||
# 垂直居中
|
|
||||||
cell.vertical_alignment = WD_ALIGN_VERTICAL.CENTER
|
|
||||||
# 单独处理第一行
|
|
||||||
for col in range(cols):
|
|
||||||
cell = table.cell(0, col)
|
|
||||||
cell.text = ""
|
cell.text = ""
|
||||||
pa = cell.paragraphs[0]
|
# 删除默认段落,稍后统一添加
|
||||||
if col == 0:
|
for para in cell.paragraphs:
|
||||||
run = pa.add_run("序号")
|
p = para._element
|
||||||
|
p.getparent().remove(p)
|
||||||
|
|
||||||
|
# 逐个添加段落
|
||||||
|
for i, line in enumerate(lines):
|
||||||
|
if i == 0:
|
||||||
|
para = cell.add_paragraph(line)
|
||||||
else:
|
else:
|
||||||
run = pa.add_run(str(table_data[0][col - 1]))
|
para = cell.add_paragraph(line)
|
||||||
|
|
||||||
|
# 设置段落对齐(第一列居中,其他左对齐,可根据需要调整)
|
||||||
|
if col == 0:
|
||||||
|
para.alignment = WD_ALIGN_PARAGRAPH.CENTER
|
||||||
|
else:
|
||||||
|
para.alignment = WD_ALIGN_PARAGRAPH.LEFT
|
||||||
|
|
||||||
|
# 对第一行(表头)设置黑体字体
|
||||||
|
if row == 0:
|
||||||
|
for run in para.runs:
|
||||||
run.font.name = '黑体'
|
run.font.name = '黑体'
|
||||||
run._element.rPr.rFonts.set(qn('w:eastAsia'), '黑体')
|
run._element.rPr.rFonts.set(qn('w:eastAsia'), '黑体')
|
||||||
run.font.bold = False
|
run.font.bold = False
|
||||||
pa.alignment = WD_ALIGN_PARAGRAPH.CENTER
|
# 表头段落居中(覆盖前面的 left)
|
||||||
# 设置序号列宽度 - 先自动调整为False然后设置True
|
para.alignment = WD_ALIGN_PARAGRAPH.CENTER
|
||||||
|
|
||||||
|
# 垂直居中
|
||||||
|
cell.vertical_alignment = WD_ALIGN_VERTICAL.CENTER
|
||||||
|
|
||||||
|
# 设置序号列宽度
|
||||||
for cell in table.columns[0].cells:
|
for cell in table.columns[0].cells:
|
||||||
cell.width = Mm(15)
|
cell.width = Mm(15)
|
||||||
pa = cell.paragraphs[0]
|
for para in cell.paragraphs:
|
||||||
pa.alignment = WD_ALIGN_PARAGRAPH.CENTER
|
para.alignment = WD_ALIGN_PARAGRAPH.CENTER
|
||||||
|
|
||||||
# 表格居中
|
# 表格居中
|
||||||
table.alignment = WD_ALIGN_PARAGRAPH.CENTER
|
table.alignment = WD_ALIGN_PARAGRAPH.CENTER
|
||||||
# 最后设置表格外边框
|
# 设置表格外边框
|
||||||
set_table_border_by_cell_position(table)
|
set_table_border_by_cell_position(table)
|
||||||
return subdoc
|
return subdoc
|
||||||
|
|
||||||
@@ -690,11 +707,13 @@ class GenerateControllerDG(ControllerBase, FragementToolsMixin):
|
|||||||
project_qs = get_object_or_404(Project, id=id)
|
project_qs = get_object_or_404(Project, id=id)
|
||||||
security = get_str_dict(project_qs.security_level, 'security_level')
|
security = get_str_dict(project_qs.security_level, 'security_level')
|
||||||
languages = get_list_dict('language', project_qs.language)
|
languages = get_list_dict('language', project_qs.language)
|
||||||
runtime = get_str_dict(project_qs.runtime, 'runtime')
|
|
||||||
devplant = get_str_dict(project_qs.devplant, 'devplant')
|
|
||||||
language_list = []
|
language_list = []
|
||||||
for language in languages:
|
for language in languages:
|
||||||
language_list.append(language.get('ident_version'))
|
language_list.append(language.get('ident_version'))
|
||||||
|
runtimes = get_list_dict('runtime', project_qs.runtime)
|
||||||
|
runtime_list = [item['ident_version'] for item in runtimes]
|
||||||
|
devplants = get_list_dict('devplant', project_qs.devplant)
|
||||||
|
devplant_list = [item['ident_version'] for item in devplants]
|
||||||
# 版本先找第一轮
|
# 版本先找第一轮
|
||||||
project_round = project_qs.pField.filter(key=0).first()
|
project_round = project_qs.pField.filter(key=0).first()
|
||||||
first_round_SO = project_round.rdField.filter(type='SO').first()
|
first_round_SO = project_round.rdField.filter(type='SO').first()
|
||||||
@@ -715,8 +734,8 @@ class GenerateControllerDG(ControllerBase, FragementToolsMixin):
|
|||||||
'recv_date': project_qs.beginTime.strftime("%Y-%m-%d"),
|
'recv_date': project_qs.beginTime.strftime("%Y-%m-%d"),
|
||||||
'dev_unit': dev_unit,
|
'dev_unit': dev_unit,
|
||||||
'soft_type': project_qs.get_soft_type_display(),
|
'soft_type': project_qs.get_soft_type_display(),
|
||||||
'runtime': runtime,
|
'runtime': "\a".join(runtime_list),
|
||||||
'devplant': devplant
|
'devplant': "\a".join(devplant_list),
|
||||||
}
|
}
|
||||||
return create_dg_docx('被测软件基本信息.docx', context, id)
|
return create_dg_docx('被测软件基本信息.docx', context, id)
|
||||||
|
|
||||||
|
|||||||
@@ -48,6 +48,10 @@ class GenerateControllerHJL(ControllerBase):
|
|||||||
round1_so_dut: Union[Dut, None] = round1_obj.rdField.filter(type='SO').first()
|
round1_so_dut: Union[Dut, None] = round1_obj.rdField.filter(type='SO').first()
|
||||||
languages = get_list_dict('language', project_obj.language)
|
languages = get_list_dict('language', project_obj.language)
|
||||||
language_list = [item['ident_version'] for item in languages]
|
language_list = [item['ident_version'] for item in languages]
|
||||||
|
runtimes = get_list_dict('runtime', project_obj.runtime)
|
||||||
|
runtime_list = [item['ident_version'] for item in runtimes]
|
||||||
|
devplants = get_list_dict('devplant', project_obj.devplant)
|
||||||
|
devplant_list = [item['ident_version'] for item in devplants]
|
||||||
# 取非第一轮次
|
# 取非第一轮次
|
||||||
hround_list: QuerySet = project_obj.pField.exclude(key='0')
|
hround_list: QuerySet = project_obj.pField.exclude(key='0')
|
||||||
if len(hround_list) < 1:
|
if len(hround_list) < 1:
|
||||||
@@ -62,8 +66,8 @@ class GenerateControllerHJL(ControllerBase):
|
|||||||
'language': "、".join(language_list),
|
'language': "、".join(language_list),
|
||||||
'soft_type': project_obj.get_soft_type_display(),
|
'soft_type': project_obj.get_soft_type_display(),
|
||||||
'security_level': get_str_dict(project_obj.security_level, 'security_level'),
|
'security_level': get_str_dict(project_obj.security_level, 'security_level'),
|
||||||
'runtime': get_str_dict(project_obj.runtime, 'runtime'),
|
'runtime': "、".join(runtime_list),
|
||||||
'devplant': get_str_dict(project_obj.devplant, 'devplant'),
|
'devplant': "、".join(devplant_list),
|
||||||
'recv_date': project_obj.beginTime.strftime("%Y-%m-%d"),
|
'recv_date': project_obj.beginTime.strftime("%Y-%m-%d"),
|
||||||
'dev_unit': project_obj.dev_unit,
|
'dev_unit': project_obj.dev_unit,
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -57,6 +57,10 @@ class GenerateControllerHSM(ControllerBase):
|
|||||||
round1_so_dut: Union[Dut, None] = round1_obj.rdField.filter(type='SO').first()
|
round1_so_dut: Union[Dut, None] = round1_obj.rdField.filter(type='SO').first()
|
||||||
languages = get_list_dict('language', project_obj.language)
|
languages = get_list_dict('language', project_obj.language)
|
||||||
language_list = [item['ident_version'] for item in languages]
|
language_list = [item['ident_version'] for item in languages]
|
||||||
|
runtimes = get_list_dict('runtime', project_obj.runtime)
|
||||||
|
runtime_list = [item['ident_version'] for item in runtimes]
|
||||||
|
devplants = get_list_dict('devplant', project_obj.devplant)
|
||||||
|
devplant_list = [item['ident_version'] for item in devplants]
|
||||||
# 取非第一轮次
|
# 取非第一轮次
|
||||||
hround_list: QuerySet = project_obj.pField.exclude(key='0')
|
hround_list: QuerySet = project_obj.pField.exclude(key='0')
|
||||||
if len(hround_list) < 1:
|
if len(hround_list) < 1:
|
||||||
@@ -71,8 +75,8 @@ class GenerateControllerHSM(ControllerBase):
|
|||||||
'language': "、".join(language_list),
|
'language': "、".join(language_list),
|
||||||
'soft_type': project_obj.get_soft_type_display(),
|
'soft_type': project_obj.get_soft_type_display(),
|
||||||
'security_level': get_str_dict(project_obj.security_level, 'security_level'),
|
'security_level': get_str_dict(project_obj.security_level, 'security_level'),
|
||||||
'runtime': get_str_dict(project_obj.runtime, 'runtime'),
|
'runtime': "、".join(runtime_list),
|
||||||
'devplant': get_str_dict(project_obj.devplant, 'devplant'),
|
'devplant': "、".join(devplant_list),
|
||||||
'recv_date': project_obj.beginTime.strftime("%Y-%m-%d"),
|
'recv_date': project_obj.beginTime.strftime("%Y-%m-%d"),
|
||||||
'dev_unit': project_obj.dev_unit,
|
'dev_unit': project_obj.dev_unit,
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
# 导入内置模块
|
# 导入内置模块
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
from django.db.models import QuerySet
|
||||||
# 导入django、ninja等模块
|
# 导入django、ninja等模块
|
||||||
from ninja_extra import api_controller, ControllerBase, route
|
from ninja_extra import api_controller, ControllerBase, route
|
||||||
from django.db import transaction
|
from django.db import transaction
|
||||||
@@ -7,7 +8,7 @@ from django.shortcuts import get_object_or_404
|
|||||||
# 导入文档处理模块
|
# 导入文档处理模块
|
||||||
from docxtpl import DocxTemplate, InlineImage
|
from docxtpl import DocxTemplate, InlineImage
|
||||||
# 导入ORM模型
|
# 导入ORM模型
|
||||||
from apps.project.models import Project
|
from apps.project.models import Project, Case
|
||||||
# 导入工具
|
# 导入工具
|
||||||
from utils.util import get_str_abbr, get_str_dict
|
from utils.util import get_str_abbr, get_str_dict
|
||||||
from utils.chen_response import ChenResponse
|
from utils.chen_response import ChenResponse
|
||||||
@@ -35,7 +36,7 @@ class GenerateControllerWtd(ControllerBase):
|
|||||||
for problem in problem_list:
|
for problem in problem_list:
|
||||||
problem_dict = {'ident': problem.ident, 'name': problem.name}
|
problem_dict = {'ident': problem.ident, 'name': problem.name}
|
||||||
# 1.生成被测对象名称、被测对象标识、被测对象版本
|
# 1.生成被测对象名称、被测对象标识、被测对象版本
|
||||||
cases = problem.case.all()
|
cases: QuerySet[Case] = problem.case.all()
|
||||||
# generate_log:无关联问题单进入生成日志
|
# generate_log:无关联问题单进入生成日志
|
||||||
if cases.count() < 1:
|
if cases.count() < 1:
|
||||||
gloger.write_warning_log('单个问题单表格', f'问题单{problem.ident}未关联用例,请检查')
|
gloger.write_warning_log('单个问题单表格', f'问题单{problem.ident}未关联用例,请检查')
|
||||||
@@ -70,9 +71,7 @@ class GenerateControllerWtd(ControllerBase):
|
|||||||
continue
|
continue
|
||||||
else:
|
else:
|
||||||
p_list.append(rich)
|
p_list.append(rich)
|
||||||
|
case_design_list.append("-".join([case.dut.name, case.design.chapter + '章节' + ":" + ''.join(p_list)]))
|
||||||
case_design_list.append(
|
|
||||||
"-".join([case.dut.name, case.design.chapter + '章节' + ":" + ''.join(p_list)]))
|
|
||||||
# 2.用例标识修改-YL_测试项类型_测试项标识_用例key+1
|
# 2.用例标识修改-YL_测试项类型_测试项标识_用例key+1
|
||||||
demand = case.test # 中间变量
|
demand = case.test # 中间变量
|
||||||
demand_testType = demand.testType # 中间变量
|
demand_testType = demand.testType # 中间变量
|
||||||
@@ -86,12 +85,13 @@ class GenerateControllerWtd(ControllerBase):
|
|||||||
for i in range(len(str_dut_name_list)):
|
for i in range(len(str_dut_name_list)):
|
||||||
temp_name_version.append(
|
temp_name_version.append(
|
||||||
"".join([str_dut_name_list[i] + str_dut_ident_list[i], '/V', str_dut_version_list[i]]))
|
"".join([str_dut_name_list[i] + str_dut_ident_list[i], '/V', str_dut_version_list[i]]))
|
||||||
problem_dict['dut_name_version'] = "\a".join(temp_name_version)
|
problem_dict['dut_name_version'] = "\a".join(set(temp_name_version))
|
||||||
problem_dict['case_ident'] = ",".join(set(case_ident_list))
|
problem_dict['case_ident'] = ",".join(set(case_ident_list))
|
||||||
problem_dict['type'] = get_str_dict(problem.type, 'problemType')
|
problem_dict['type'] = get_str_dict(problem.type, 'problemType')
|
||||||
problem_dict['grade'] = get_str_dict(problem.grade, 'problemGrade')
|
problem_dict['grade'] = get_str_dict(problem.grade, 'problemGrade')
|
||||||
|
|
||||||
# 依据要求-获取其设计需求
|
# 依据要求-获取其设计需求
|
||||||
|
print(case_design_list)
|
||||||
problem_dict['yaoqiu'] = "\a".join(case_design_list)
|
problem_dict['yaoqiu'] = "\a".join(case_design_list)
|
||||||
# 问题操作 - HTML解析
|
# 问题操作 - HTML解析
|
||||||
desc_list = ['【问题操作】']
|
desc_list = ['【问题操作】']
|
||||||
|
|||||||
Binary file not shown.
@@ -91,6 +91,8 @@ class RichParser:
|
|||||||
inline_image = InlineImage(doc, io.BytesIO(base64_bytes), width=Mm(img_size), height=Mm(height))
|
inline_image = InlineImage(doc, io.BytesIO(base64_bytes), width=Mm(img_size), height=Mm(height))
|
||||||
final_list.append(inline_image)
|
final_list.append(inline_image)
|
||||||
else:
|
else:
|
||||||
|
# ~~~新增:将\xa0修改为普通空格~~~
|
||||||
|
oneline = oneline.replace('\xa0', ' ')
|
||||||
final_list.append(oneline)
|
final_list.append(oneline)
|
||||||
if len(final_list) <= 0:
|
if len(final_list) <= 0:
|
||||||
final_list.append("")
|
final_list.append("")
|
||||||
@@ -116,9 +118,9 @@ class RichParser:
|
|||||||
else:
|
else:
|
||||||
# 2.和上面区别:如果<p>带有“图”则居中
|
# 2.和上面区别:如果<p>带有“图”则居中
|
||||||
if re.match(r"[表图]\d.*", oneline):
|
if re.match(r"[表图]\d.*", oneline):
|
||||||
final_list.append({"isCenter": True, "data": oneline})
|
final_list.append({"isCenter": True, "data": oneline.replace('\xa0', ' ')})
|
||||||
else:
|
else:
|
||||||
final_list.append({"isCenter": False, "data": oneline})
|
final_list.append({"isCenter": False, "data": oneline.replace('\xa0', ' ')})
|
||||||
if len(final_list) <= 0:
|
if len(final_list) <= 0:
|
||||||
final_list.append("")
|
final_list.append("")
|
||||||
return final_list
|
return final_list
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -257,7 +257,7 @@ class CaseController(ControllerBase):
|
|||||||
single_qs.key = case_key
|
single_qs.key = case_key
|
||||||
index = index + 1
|
index = index + 1
|
||||||
single_qs.save()
|
single_qs.save()
|
||||||
return ChenResponse(message="测试用例删除成功!")
|
return ChenResponse(message="测试用例删除成功!影响域分析中如果有该关联用例则被删除。")
|
||||||
|
|
||||||
# 右键测试项,根据测试子项生成用例
|
# 右键测试项,根据测试子项生成用例
|
||||||
@route.post("/case/create_by_demand", url_name='case-create-by-demand')
|
@route.post("/case/create_by_demand", url_name='case-create-by-demand')
|
||||||
|
|||||||
@@ -0,0 +1,24 @@
|
|||||||
|
# Generated by Django 6.0.4 on 2026-04-17 13:57
|
||||||
|
|
||||||
|
import apps.project.models
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('project', '0029_influenceitem_change_influ'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='project',
|
||||||
|
name='devplant',
|
||||||
|
field=models.JSONField(blank=True, default=apps.project.models.create_list, help_text='开发环境', null=True, verbose_name='开发环境'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='project',
|
||||||
|
name='runtime',
|
||||||
|
field=models.JSONField(blank=True, default=apps.project.models.create_list, help_text='运行环境', null=True, verbose_name='运行环境'),
|
||||||
|
),
|
||||||
|
]
|
||||||
18
apps/project/migrations/0031_alter_testdemand_adequacy.py
Normal file
18
apps/project/migrations/0031_alter_testdemand_adequacy.py
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
# Generated by Django 6.0.4 on 2026-04-17 16:20
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('project', '0030_alter_project_devplant_alter_project_runtime'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='testdemand',
|
||||||
|
name='adequacy',
|
||||||
|
field=models.CharField(blank=True, help_text='充分条件', max_length=2048, null=True, verbose_name='充分条件'),
|
||||||
|
),
|
||||||
|
]
|
||||||
18
apps/project/migrations/0032_alter_design_protocal.py
Normal file
18
apps/project/migrations/0032_alter_design_protocal.py
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
# Generated by Django 6.0.4 on 2026-04-20 10:36
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('project', '0031_alter_testdemand_adequacy'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='design',
|
||||||
|
name='protocal',
|
||||||
|
field=models.CharField(blank=True, default='', help_text='接口数据', max_length=1024, null=True, verbose_name='接口数据'),
|
||||||
|
),
|
||||||
|
]
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -27,50 +27,29 @@ class Project(CoreModel):
|
|||||||
vise_person = models.CharField(max_length=64, verbose_name="质量监督员", help_text="质量监督员")
|
vise_person = models.CharField(max_length=64, verbose_name="质量监督员", help_text="质量监督员")
|
||||||
config_person = models.CharField(max_length=64, verbose_name="配置管理员", help_text="配置管理员")
|
config_person = models.CharField(max_length=64, verbose_name="配置管理员", help_text="配置管理员")
|
||||||
# ~~~~~~~~~~~
|
# ~~~~~~~~~~~
|
||||||
security_level = models.CharField(max_length=8, blank=True, null=True, verbose_name="安全等级",
|
security_level = models.CharField(max_length=8, blank=True, null=True, verbose_name="安全等级", help_text="安全等级")
|
||||||
help_text="安全等级")
|
test_level = models.JSONField(null=True, blank=True, help_text="测试级别", verbose_name="测试级别", default=create_list)
|
||||||
test_level = models.JSONField(null=True, blank=True, help_text="测试级别", verbose_name="测试级别",
|
plant_type = models.JSONField(null=True, blank=True, help_text="平台类型", verbose_name="平台类型", default=create_list)
|
||||||
default=create_list)
|
report_type = models.CharField(max_length=64, blank=True, null=True, verbose_name="报告类型", help_text="报告类型")
|
||||||
plant_type = models.JSONField(null=True, blank=True, help_text="平台类型", verbose_name="平台类型",
|
language = models.JSONField(null=True, blank=True, help_text="被测语言", verbose_name="被测语言", default=create_list)
|
||||||
default=create_list)
|
standard = models.JSONField(null=True, blank=True, help_text="依据标准", verbose_name="依据标准", default=create_list)
|
||||||
report_type = models.CharField(max_length=64, blank=True, null=True, verbose_name="报告类型",
|
|
||||||
help_text="报告类型")
|
|
||||||
language = models.JSONField(null=True, blank=True, help_text="被测语言", verbose_name="被测语言",
|
|
||||||
default=create_list)
|
|
||||||
standard = models.JSONField(null=True, blank=True, help_text="依据标准", verbose_name="依据标准",
|
|
||||||
default=create_list)
|
|
||||||
entrust_unit = models.CharField(max_length=64, verbose_name="委托方单位", help_text="委托方单位")
|
entrust_unit = models.CharField(max_length=64, verbose_name="委托方单位", help_text="委托方单位")
|
||||||
entrust_contact = models.CharField(max_length=64, blank=True, null=True, verbose_name="委托方联系人",
|
entrust_contact = models.CharField(max_length=64, blank=True, null=True, verbose_name="委托方联系人", help_text="委托方联系人")
|
||||||
help_text="委托方联系人")
|
entrust_contact_phone = models.CharField(max_length=64, blank=True, null=True, verbose_name="委托方电话", help_text="委托方电话")
|
||||||
entrust_contact_phone = models.CharField(max_length=64, blank=True, null=True, verbose_name="委托方电话",
|
entrust_email = models.CharField(max_length=64, blank=True, null=True, verbose_name="委托方邮箱", help_text="委托方邮箱")
|
||||||
help_text="委托方电话")
|
|
||||||
entrust_email = models.CharField(max_length=64, blank=True, null=True, verbose_name="委托方邮箱",
|
|
||||||
help_text="委托方邮箱")
|
|
||||||
dev_unit = models.CharField(max_length=64, verbose_name="开发方单位", help_text="开发方单位")
|
dev_unit = models.CharField(max_length=64, verbose_name="开发方单位", help_text="开发方单位")
|
||||||
dev_contact = models.CharField(max_length=64, blank=True, null=True, verbose_name="研制方联系人",
|
dev_contact = models.CharField(max_length=64, blank=True, null=True, verbose_name="研制方联系人", help_text="研制方联系人")
|
||||||
help_text="研制方联系人")
|
dev_contact_phone = models.CharField(max_length=64, blank=True, null=True, verbose_name="研制方电话", help_text="研制方电话")
|
||||||
dev_contact_phone = models.CharField(max_length=64, blank=True, null=True, verbose_name="研制方电话",
|
dev_email = models.CharField(max_length=64, blank=True, null=True, verbose_name="研制方邮箱", help_text="研制方邮箱")
|
||||||
help_text="研制方电话")
|
|
||||||
dev_email = models.CharField(max_length=64, blank=True, null=True, verbose_name="研制方邮箱",
|
|
||||||
help_text="研制方邮箱")
|
|
||||||
test_unit = models.CharField(max_length=64, verbose_name="测试方单位", help_text="测试方单位")
|
test_unit = models.CharField(max_length=64, verbose_name="测试方单位", help_text="测试方单位")
|
||||||
test_contact = models.CharField(max_length=64, blank=True, null=True, verbose_name="测评中心联系人",
|
test_contact = models.CharField(max_length=64, blank=True, null=True, verbose_name="测评中心联系人", help_text="测评中心联系人")
|
||||||
help_text="测评中心联系人")
|
test_contact_phone = models.CharField(max_length=64, blank=True, null=True, verbose_name="测评中心电话", help_text="测评中心电话")
|
||||||
test_contact_phone = models.CharField(max_length=64, blank=True, null=True, verbose_name="测评中心电话",
|
test_email = models.CharField(max_length=64, blank=True, null=True, verbose_name="测评中心邮箱", help_text="测评中心邮箱")
|
||||||
help_text="测评中心电话")
|
step = models.CharField(max_length=8, blank=True, null=True, verbose_name="项目阶段", help_text="项目阶段")
|
||||||
test_email = models.CharField(max_length=64, blank=True, null=True, verbose_name="测评中心邮箱",
|
abbreviation = models.JSONField(null=True, blank=True, help_text="缩略语", verbose_name="缩略语", default=create_list)
|
||||||
help_text="测评中心邮箱")
|
soft_type = models.SmallIntegerField(verbose_name='软件类型', choices=((1, '新研'), (2, '改造'), (3, '沿用')), default=1)
|
||||||
step = models.CharField(max_length=8, blank=True, null=True, verbose_name="项目阶段",
|
runtime = models.JSONField(null=True, blank=True, help_text="运行环境", verbose_name="运行环境", default=create_list)
|
||||||
help_text="项目阶段")
|
devplant = models.JSONField(null=True, blank=True, help_text="开发环境", verbose_name="开发环境", default=create_list)
|
||||||
abbreviation = models.JSONField(null=True, blank=True, help_text="缩略语", verbose_name="缩略语",
|
|
||||||
default=create_list)
|
|
||||||
soft_type = models.SmallIntegerField(verbose_name='软件类型',
|
|
||||||
choices=((1, '新研'), (2, '改造'), (3, '沿用')),
|
|
||||||
default=1)
|
|
||||||
runtime = models.CharField(max_length=8, blank=True, null=True, verbose_name="运行环境",
|
|
||||||
help_text="运行环境")
|
|
||||||
devplant = models.CharField(max_length=8, blank=True, null=True, verbose_name="开发环境",
|
|
||||||
help_text="开发环境")
|
|
||||||
# 9月2日新增字段:密级
|
# 9月2日新增字段:密级
|
||||||
secret = models.CharField(max_length=30, default='1', verbose_name='密级', help_text='密级')
|
secret = models.CharField(max_length=30, default='1', verbose_name='密级', help_text='密级')
|
||||||
|
|
||||||
@@ -226,7 +205,7 @@ class Design(CoreModel):
|
|||||||
type = models.CharField(max_length=64, blank=True, null=True, default='', verbose_name='接口类型',
|
type = models.CharField(max_length=64, blank=True, null=True, default='', verbose_name='接口类型',
|
||||||
help_text='接口类型')
|
help_text='接口类型')
|
||||||
# 注意:该字段改为接口数据
|
# 注意:该字段改为接口数据
|
||||||
protocal = models.CharField(max_length=64, blank=True, null=True, default='', verbose_name='接口数据',
|
protocal = models.CharField(max_length=1024, blank=True, null=True, default='', verbose_name='接口数据',
|
||||||
help_text='接口数据')
|
help_text='接口数据')
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
@@ -239,23 +218,15 @@ class Design(CoreModel):
|
|||||||
ordering = ('key',)
|
ordering = ('key',)
|
||||||
|
|
||||||
class TestDemand(CoreModel):
|
class TestDemand(CoreModel):
|
||||||
objects = models.Manager()
|
|
||||||
"""测试项"""
|
"""测试项"""
|
||||||
ident = models.CharField(max_length=64, blank=True, null=True, verbose_name="测试需求标识",
|
objects = models.Manager()
|
||||||
help_text="测试需求标识")
|
ident = models.CharField(max_length=64, blank=True, null=True, verbose_name="测试需求标识", help_text="测试需求标识")
|
||||||
name = models.CharField(max_length=64, blank=True, null=True, verbose_name="测试需求名称",
|
name = models.CharField(max_length=64, blank=True, null=True, verbose_name="测试需求名称", help_text="测试需求名称")
|
||||||
help_text="测试需求名称")
|
adequacy = models.CharField(max_length=2048, blank=True, null=True, verbose_name="充分条件", help_text="充分条件")
|
||||||
adequacy = models.CharField(max_length=256, blank=True, null=True, verbose_name="充分条件",
|
priority = models.CharField(max_length=8, blank=True, null=True, verbose_name="优先级", help_text="优先级")
|
||||||
help_text="充分条件")
|
testType = models.CharField(max_length=8, null=True, blank=True, help_text="测试类型", verbose_name="测试类型", default="1")
|
||||||
priority = models.CharField(max_length=8, blank=True, null=True, verbose_name="优先级",
|
testMethod = models.JSONField(blank=True, help_text="测试方法", verbose_name="测试方法", default=create_list)
|
||||||
help_text="优先级")
|
title = models.CharField(max_length=64, blank=True, null=True, verbose_name="树-名称", help_text="树-名称")
|
||||||
testType = models.CharField(max_length=8, null=True, blank=True, help_text="测试类型",
|
|
||||||
verbose_name="测试类型",
|
|
||||||
default="1")
|
|
||||||
testMethod = models.JSONField(blank=True, help_text="测试方法", verbose_name="测试方法",
|
|
||||||
default=create_list)
|
|
||||||
title = models.CharField(max_length=64, blank=True, null=True, verbose_name="树-名称",
|
|
||||||
help_text="树-名称")
|
|
||||||
key = models.CharField(max_length=64, blank=True, null=True,
|
key = models.CharField(max_length=64, blank=True, null=True,
|
||||||
verbose_name="round-dut-designkey-testdemand",
|
verbose_name="round-dut-designkey-testdemand",
|
||||||
help_text="round-dut-designkey-testdemand")
|
help_text="round-dut-designkey-testdemand")
|
||||||
|
|||||||
@@ -5,6 +5,8 @@ from django.db.models.signals import post_save, post_delete
|
|||||||
from django.dispatch import receiver
|
from django.dispatch import receiver
|
||||||
from django.utils.functional import SimpleLazyObject
|
from django.utils.functional import SimpleLazyObject
|
||||||
from django.contrib.auth import get_user_model
|
from django.contrib.auth import get_user_model
|
||||||
|
# 导入用例和影响域分析Model-设计信号当删除用例对应影响域分析删除关联用例
|
||||||
|
from apps.project.models import Case, InfluenceItem
|
||||||
# 导入日志的模型
|
# 导入日志的模型
|
||||||
from apps.user.models import TableOperationLog, Users
|
from apps.user.models import TableOperationLog, Users
|
||||||
# 导入其他模型用于排除
|
# 导入其他模型用于排除
|
||||||
@@ -89,3 +91,42 @@ def post_delete_handler(sender, instance, **kwargs):
|
|||||||
'operate_des': '删除'
|
'operate_des': '删除'
|
||||||
}
|
}
|
||||||
log_manager.create(user=user, **ope_dict)
|
log_manager.create(user=user, **ope_dict)
|
||||||
|
|
||||||
|
# 信号:删除影响域分析关联的用例,将影响域分析管理用例删除
|
||||||
|
@receiver(post_delete, sender=Case)
|
||||||
|
def clean_up_deleted_case_reference_from_influence(sender, instance, **kwargs):
|
||||||
|
"""
|
||||||
|
监听 Case 的删除信号。
|
||||||
|
仅在同一个 Project 范围内,从 InfluenceItem 的 effect_cases 中移除被删用例的 key。
|
||||||
|
"""
|
||||||
|
deleted_key = instance.key
|
||||||
|
project_id = instance.project_id
|
||||||
|
|
||||||
|
if not deleted_key or not project_id:
|
||||||
|
return
|
||||||
|
|
||||||
|
# 查询当前项目的影响域分析并且包含该用例
|
||||||
|
items = InfluenceItem.objects.filter(
|
||||||
|
influence__round__project_id=project_id, # 外键链锁定项目
|
||||||
|
effect_cases__contains=[deleted_key] # JSON 字段包含该 key
|
||||||
|
)
|
||||||
|
|
||||||
|
# 未发现有关联的影响域分析则不处理
|
||||||
|
if not items.exists():
|
||||||
|
return
|
||||||
|
|
||||||
|
# 更新影响域分析的关联用例
|
||||||
|
updated_items = []
|
||||||
|
for item in items:
|
||||||
|
original_keys = item.effect_cases
|
||||||
|
# 过滤掉被删除的 key,保留其他
|
||||||
|
new_keys = [k for k in original_keys if k != deleted_key]
|
||||||
|
|
||||||
|
if len(new_keys) != len(original_keys):
|
||||||
|
item.effect_cases = new_keys
|
||||||
|
updated_items.append(item)
|
||||||
|
|
||||||
|
if updated_items:
|
||||||
|
InfluenceItem.objects.bulk_update(updated_items, ['effect_cases'])
|
||||||
|
else:
|
||||||
|
print("⚠️ 查询到记录但未发生变更,可能数据有误")
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -15,7 +15,7 @@ env.read_env(env_file=Path(__file__).resolve().parent.parent / env_file)
|
|||||||
# 数据库地址
|
# 数据库地址
|
||||||
DATABASE_HOST = "127.0.0.1"
|
DATABASE_HOST = "127.0.0.1"
|
||||||
# 数据库端口
|
# 数据库端口
|
||||||
DATABASE_PORT = 3307 # 生成环境配置
|
DATABASE_PORT = 3306 # 生成环境配置-注意打包时务必需改为3307!!!!!!
|
||||||
# 数据库用户名
|
# 数据库用户名
|
||||||
DATABASE_USER = "root"
|
DATABASE_USER = "root"
|
||||||
# 数据库密码
|
# 数据库密码
|
||||||
|
|||||||
@@ -0,0 +1,2 @@
|
|||||||
|
[WARNING][2026-04-17 14:20:04,514][logger.py:25][回归测试记录模块][字典数据缺失]片段:字典数据runtime数据缺失,请检查相应数据是否存在
|
||||||
|
[WARNING][2026-04-17 14:20:04,518][logger.py:25][回归测试记录模块][字典数据缺失]片段:字典数据devplant数据缺失,请检查相应数据是否存在
|
||||||
|
|||||||
687
logs/root_log
687
logs/root_log
@@ -322,3 +322,690 @@ Traceback (most recent call last):
|
|||||||
pic_nodes = new_element.xpath('.//pic:pic', namespaces=nsmap)
|
pic_nodes = new_element.xpath('.//pic:pic', namespaces=nsmap)
|
||||||
TypeError: BaseOxmlElement.xpath() got an unexpected keyword argument 'namespaces'
|
TypeError: BaseOxmlElement.xpath() got an unexpected keyword argument 'namespaces'
|
||||||
[ERROR][2026-04-16 17:21:20,341][log.py:249]Internal Server Error: /api/documentUpload/file
|
[ERROR][2026-04-16 17:21:20,341][log.py:249]Internal Server Error: /api/documentUpload/file
|
||||||
|
[WARNING][2026-04-17 13:45:31,769][log.py:249]Unauthorized: /api/system/getInfo
|
||||||
|
[WARNING][2026-04-17 13:45:31,835][log.py:249]Unauthorized: /api/system/logout
|
||||||
|
[WARNING][2026-04-17 13:45:36,826][backend.py:91]Caught LDAPError looking up user: SERVER_DOWN({'result': -1, 'desc': "Can't contact LDAP server", 'ctrls': []})
|
||||||
|
[WARNING][2026-04-17 14:20:04,514][logger.py:25][回归测试记录模块][字典数据缺失]片段:字典数据runtime数据缺失,请检查相应数据是否存在
|
||||||
|
[WARNING][2026-04-17 14:20:04,518][logger.py:25][回归测试记录模块][字典数据缺失]片段:字典数据devplant数据缺失,请检查相应数据是否存在
|
||||||
|
[WARNING][2026-04-17 16:18:06,060][operation.py:136]"PUT - TestDemandController[update_testDemand] /api/project/testDemand/update/670" (1406, "Data too long for column 'adequacy' at row 1")
|
||||||
|
[ERROR][2026-04-17 16:18:06,060][errors.py:131](1406, "Data too long for column 'adequacy' at row 1")
|
||||||
|
Traceback (most recent call last):
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\django\db\backends\utils.py", line 105, in _execute
|
||||||
|
return self.cursor.execute(sql, params)
|
||||||
|
~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\django\db\backends\mysql\base.py", line 78, in execute
|
||||||
|
return self.cursor.execute(query, args)
|
||||||
|
~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\MySQLdb\cursors.py", line 179, in execute
|
||||||
|
res = self._query(mogrified_query)
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\MySQLdb\cursors.py", line 330, in _query
|
||||||
|
db.query(q)
|
||||||
|
~~~~~~~~^^^
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\MySQLdb\connections.py", line 286, in query
|
||||||
|
_mysql.connection.query(self, query)
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^
|
||||||
|
MySQLdb.DataError: (1406, "Data too long for column 'adequacy' at row 1")
|
||||||
|
|
||||||
|
The above exception was the direct cause of the following exception:
|
||||||
|
|
||||||
|
Traceback (most recent call last):
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\ninja_extra\operation.py", line 217, in run
|
||||||
|
result = self.view_func(request, **ctx.kwargs["view_func_kwargs"])
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\ninja_extra\controllers\route\route_functions.py", line 108, in as_view
|
||||||
|
result = self.route.view_func(
|
||||||
|
ctx.controller_instance, *args, **ctx.view_func_kwargs
|
||||||
|
)
|
||||||
|
File "D:\programs\uv\python\cpython-3.13.11-windows-x86_64-none\Lib\contextlib.py", line 85, in inner
|
||||||
|
return func(*args, **kwds)
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\apps\project\controllers\testDemand.py", line 270, in update_testDemand
|
||||||
|
testDemand_qs.save()
|
||||||
|
~~~~~~~~~~~~~~~~~~^^
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\django\db\models\base.py", line 874, in save
|
||||||
|
self.save_base(
|
||||||
|
~~~~~~~~~~~~~~^
|
||||||
|
using=using,
|
||||||
|
^^^^^^^^^^^^
|
||||||
|
...<2 lines>...
|
||||||
|
update_fields=update_fields,
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
)
|
||||||
|
^
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\django\db\models\base.py", line 966, in save_base
|
||||||
|
updated = self._save_table(
|
||||||
|
raw,
|
||||||
|
...<4 lines>...
|
||||||
|
update_fields,
|
||||||
|
)
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\django\db\models\base.py", line 1110, in _save_table
|
||||||
|
results = self._do_update(
|
||||||
|
base_qs,
|
||||||
|
...<5 lines>...
|
||||||
|
returning_fields,
|
||||||
|
)
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\django\db\models\base.py", line 1213, in _do_update
|
||||||
|
return filtered._update(values, returning_fields)
|
||||||
|
~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\django\db\models\query.py", line 1327, in _update
|
||||||
|
return query.get_compiler(self.db).execute_returning_sql(returning_fields)
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\django\db\models\sql\compiler.py", line 2140, in execute_returning_sql
|
||||||
|
row_count = self.execute_sql(ROW_COUNT)
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\django\db\models\sql\compiler.py", line 2111, in execute_sql
|
||||||
|
row_count = super().execute_sql(result_type)
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\django\db\models\sql\compiler.py", line 1624, in execute_sql
|
||||||
|
cursor.execute(sql, params)
|
||||||
|
~~~~~~~~~~~~~~^^^^^^^^^^^^^
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\django\db\backends\utils.py", line 122, in execute
|
||||||
|
return super().execute(sql, params)
|
||||||
|
~~~~~~~~~~~~~~~^^^^^^^^^^^^^
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\django\db\backends\utils.py", line 79, in execute
|
||||||
|
return self._execute_with_wrappers(
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~^
|
||||||
|
sql, params, many=False, executor=self._execute
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
)
|
||||||
|
^
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\django\db\backends\utils.py", line 92, in _execute_with_wrappers
|
||||||
|
return executor(sql, params, many, context)
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\django\db\backends\utils.py", line 100, in _execute
|
||||||
|
with self.db.wrap_database_errors:
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\django\db\utils.py", line 94, in __exit__
|
||||||
|
raise dj_exc_value.with_traceback(traceback) from exc_value
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\django\db\backends\utils.py", line 105, in _execute
|
||||||
|
return self.cursor.execute(sql, params)
|
||||||
|
~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\django\db\backends\mysql\base.py", line 78, in execute
|
||||||
|
return self.cursor.execute(query, args)
|
||||||
|
~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\MySQLdb\cursors.py", line 179, in execute
|
||||||
|
res = self._query(mogrified_query)
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\MySQLdb\cursors.py", line 330, in _query
|
||||||
|
db.query(q)
|
||||||
|
~~~~~~~~^^^
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\MySQLdb\connections.py", line 286, in query
|
||||||
|
_mysql.connection.query(self, query)
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^
|
||||||
|
django.db.utils.DataError: (1406, "Data too long for column 'adequacy' at row 1")
|
||||||
|
[ERROR][2026-04-17 16:18:06,071][log.py:249]Internal Server Error: /api/project/testDemand/update/670
|
||||||
|
[WARNING][2026-04-17 16:35:01,341][log.py:249]Bad Request: /api/testmanage/project/save
|
||||||
|
[WARNING][2026-04-17 16:45:59,963][log.py:249]Bad Request: /api/testmanage/project/save
|
||||||
|
[WARNING][2026-04-17 16:46:01,209][log.py:249]Bad Request: /api/testmanage/project/save
|
||||||
|
[WARNING][2026-04-17 17:01:10,991][log.py:249]Bad Request: /api/testmanage/project/save
|
||||||
|
[WARNING][2026-04-20 09:31:28,826][log.py:249]Unauthorized: /api/system/getInfo
|
||||||
|
[WARNING][2026-04-20 09:31:28,893][log.py:249]Unauthorized: /api/system/logout
|
||||||
|
[WARNING][2026-04-20 09:31:36,102][backend.py:91]Caught LDAPError looking up user: SERVER_DOWN({'result': -1, 'desc': "Can't contact LDAP server", 'ctrls': []})
|
||||||
|
[ERROR][2026-04-20 09:34:09,062][log.py:249]Internal Server Error: /api/project/testDemand/save
|
||||||
|
[ERROR][2026-04-20 09:34:10,386][log.py:249]Internal Server Error: /api/project/testDemand/save
|
||||||
|
[ERROR][2026-04-20 09:34:10,841][log.py:249]Internal Server Error: /api/project/testDemand/save
|
||||||
|
[WARNING][2026-04-20 10:25:04,532][operation.py:136]"GET - GenerateControllerDG[create_static_hard] /api/generate/create/static_hard" ('All strings must be XML compatible: Unicode or ASCII, no NULL bytes or control characters',)
|
||||||
|
[ERROR][2026-04-20 10:25:04,532][errors.py:131]All strings must be XML compatible: Unicode or ASCII, no NULL bytes or control characters
|
||||||
|
Traceback (most recent call last):
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\ninja_extra\operation.py", line 217, in run
|
||||||
|
result = self.view_func(request, **ctx.kwargs["view_func_kwargs"])
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\ninja_extra\controllers\route\route_functions.py", line 108, in as_view
|
||||||
|
result = self.route.view_func(
|
||||||
|
ctx.controller_instance, *args, **ctx.view_func_kwargs
|
||||||
|
)
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\apps\createDocument\controllers\dg.py", line 567, in create_static_hard
|
||||||
|
res = self.uniform_static_dynamic_response(id, '静态硬件和固件项_2.docx', '静态硬件和固件项.docx', StaticSoftHardware)
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\apps\createDocument\controllers\dg.py", line 535, in uniform_static_dynamic_response
|
||||||
|
subdoc = cls.create_table_context(table_data, doc)
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\apps\createDocument\controllers\dg.py", line 498, in create_table_context
|
||||||
|
cell.text = cell.text.replace("\n", "\a")
|
||||||
|
^^^^^^^^^
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\docx\table.py", line 284, in text
|
||||||
|
r.text = text
|
||||||
|
^^^^^^
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\docx\oxml\text\run.py", line 143, in text
|
||||||
|
_RunContentAppender.append_to_run_from_text(self, text)
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\docx\oxml\text\run.py", line 279, in append_to_run_from_text
|
||||||
|
appender.add_text(text)
|
||||||
|
~~~~~~~~~~~~~~~~~^^^^^^
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\docx\oxml\text\run.py", line 285, in add_text
|
||||||
|
self.flush()
|
||||||
|
~~~~~~~~~~^^
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\docx\oxml\text\run.py", line 306, in flush
|
||||||
|
self._r.add_t(text)
|
||||||
|
~~~~~~~~~~~~~^^^^^^
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\docx\oxml\text\run.py", line 42, in add_t
|
||||||
|
t = self._add_t(text=text)
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\docx\oxml\xmlchemy.py", line 288, in _add_child
|
||||||
|
setattr(child, key, value)
|
||||||
|
~~~~~~~^^^^^^^^^^^^^^^^^^^
|
||||||
|
File "src/lxml/etree.pyx", line 1168, in lxml.etree._Element.text.__set__
|
||||||
|
File "src/lxml/apihelpers.pxi", line 763, in lxml.etree._setNodeText
|
||||||
|
File "src/lxml/apihelpers.pxi", line 751, in lxml.etree._createTextNode
|
||||||
|
File "src/lxml/apihelpers.pxi", line 1556, in lxml.etree._utf8
|
||||||
|
ValueError: All strings must be XML compatible: Unicode or ASCII, no NULL bytes or control characters
|
||||||
|
[ERROR][2026-04-20 10:25:04,710][log.py:249]Internal Server Error: /api/generate/create/static_hard
|
||||||
|
[WARNING][2026-04-20 10:25:26,146][operation.py:136]"GET - GenerateControllerDG[create_static_hard] /api/generate/create/static_hard" ('All strings must be XML compatible: Unicode or ASCII, no NULL bytes or control characters',)
|
||||||
|
[ERROR][2026-04-20 10:25:26,150][errors.py:131]All strings must be XML compatible: Unicode or ASCII, no NULL bytes or control characters
|
||||||
|
Traceback (most recent call last):
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\ninja_extra\operation.py", line 217, in run
|
||||||
|
result = self.view_func(request, **ctx.kwargs["view_func_kwargs"])
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\ninja_extra\controllers\route\route_functions.py", line 108, in as_view
|
||||||
|
result = self.route.view_func(
|
||||||
|
ctx.controller_instance, *args, **ctx.view_func_kwargs
|
||||||
|
)
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\apps\createDocument\controllers\dg.py", line 567, in create_static_hard
|
||||||
|
res = self.uniform_static_dynamic_response(id, '静态硬件和固件项_2.docx', '静态硬件和固件项.docx', StaticSoftHardware)
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\apps\createDocument\controllers\dg.py", line 535, in uniform_static_dynamic_response
|
||||||
|
subdoc = cls.create_table_context(table_data, doc)
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\apps\createDocument\controllers\dg.py", line 498, in create_table_context
|
||||||
|
cell.text = cell.text.replace("\n", "\a")
|
||||||
|
^^^^^^^^^
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\docx\table.py", line 284, in text
|
||||||
|
r.text = text
|
||||||
|
^^^^^^
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\docx\oxml\text\run.py", line 143, in text
|
||||||
|
_RunContentAppender.append_to_run_from_text(self, text)
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\docx\oxml\text\run.py", line 279, in append_to_run_from_text
|
||||||
|
appender.add_text(text)
|
||||||
|
~~~~~~~~~~~~~~~~~^^^^^^
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\docx\oxml\text\run.py", line 285, in add_text
|
||||||
|
self.flush()
|
||||||
|
~~~~~~~~~~^^
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\docx\oxml\text\run.py", line 306, in flush
|
||||||
|
self._r.add_t(text)
|
||||||
|
~~~~~~~~~~~~~^^^^^^
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\docx\oxml\text\run.py", line 42, in add_t
|
||||||
|
t = self._add_t(text=text)
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\docx\oxml\xmlchemy.py", line 288, in _add_child
|
||||||
|
setattr(child, key, value)
|
||||||
|
~~~~~~~^^^^^^^^^^^^^^^^^^^
|
||||||
|
File "src/lxml/etree.pyx", line 1168, in lxml.etree._Element.text.__set__
|
||||||
|
File "src/lxml/apihelpers.pxi", line 763, in lxml.etree._setNodeText
|
||||||
|
File "src/lxml/apihelpers.pxi", line 751, in lxml.etree._createTextNode
|
||||||
|
File "src/lxml/apihelpers.pxi", line 1556, in lxml.etree._utf8
|
||||||
|
ValueError: All strings must be XML compatible: Unicode or ASCII, no NULL bytes or control characters
|
||||||
|
[ERROR][2026-04-20 10:25:26,215][log.py:249]Internal Server Error: /api/generate/create/static_hard
|
||||||
|
[WARNING][2026-04-20 10:25:46,224][operation.py:136]"GET - GenerateControllerDG[create_static_hard] /api/generate/create/static_hard" ('All strings must be XML compatible: Unicode or ASCII, no NULL bytes or control characters',)
|
||||||
|
[ERROR][2026-04-20 10:25:46,224][errors.py:131]All strings must be XML compatible: Unicode or ASCII, no NULL bytes or control characters
|
||||||
|
Traceback (most recent call last):
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\ninja_extra\operation.py", line 217, in run
|
||||||
|
result = self.view_func(request, **ctx.kwargs["view_func_kwargs"])
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\ninja_extra\controllers\route\route_functions.py", line 108, in as_view
|
||||||
|
result = self.route.view_func(
|
||||||
|
ctx.controller_instance, *args, **ctx.view_func_kwargs
|
||||||
|
)
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\apps\createDocument\controllers\dg.py", line 565, in create_static_hard
|
||||||
|
res = self.uniform_static_dynamic_response(id, '静态硬件和固件项_2.docx', '静态硬件和固件项.docx', StaticSoftHardware)
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\apps\createDocument\controllers\dg.py", line 533, in uniform_static_dynamic_response
|
||||||
|
subdoc = cls.create_table_context(table_data, doc)
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\apps\createDocument\controllers\dg.py", line 496, in create_table_context
|
||||||
|
cell.text = table_data[row][col - 1].replace("\n", "\a")
|
||||||
|
^^^^^^^^^
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\docx\table.py", line 284, in text
|
||||||
|
r.text = text
|
||||||
|
^^^^^^
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\docx\oxml\text\run.py", line 143, in text
|
||||||
|
_RunContentAppender.append_to_run_from_text(self, text)
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\docx\oxml\text\run.py", line 279, in append_to_run_from_text
|
||||||
|
appender.add_text(text)
|
||||||
|
~~~~~~~~~~~~~~~~~^^^^^^
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\docx\oxml\text\run.py", line 285, in add_text
|
||||||
|
self.flush()
|
||||||
|
~~~~~~~~~~^^
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\docx\oxml\text\run.py", line 306, in flush
|
||||||
|
self._r.add_t(text)
|
||||||
|
~~~~~~~~~~~~~^^^^^^
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\docx\oxml\text\run.py", line 42, in add_t
|
||||||
|
t = self._add_t(text=text)
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\docx\oxml\xmlchemy.py", line 288, in _add_child
|
||||||
|
setattr(child, key, value)
|
||||||
|
~~~~~~~^^^^^^^^^^^^^^^^^^^
|
||||||
|
File "src/lxml/etree.pyx", line 1168, in lxml.etree._Element.text.__set__
|
||||||
|
File "src/lxml/apihelpers.pxi", line 763, in lxml.etree._setNodeText
|
||||||
|
File "src/lxml/apihelpers.pxi", line 751, in lxml.etree._createTextNode
|
||||||
|
File "src/lxml/apihelpers.pxi", line 1556, in lxml.etree._utf8
|
||||||
|
ValueError: All strings must be XML compatible: Unicode or ASCII, no NULL bytes or control characters
|
||||||
|
[ERROR][2026-04-20 10:25:46,266][log.py:249]Internal Server Error: /api/generate/create/static_hard
|
||||||
|
[WARNING][2026-04-20 10:34:26,463][operation.py:136]"POST - DesignController[create_design] /api/project/designDemand/save" (1406, "Data too long for column 'protocal' at row 1")
|
||||||
|
[ERROR][2026-04-20 10:34:26,463][errors.py:131](1406, "Data too long for column 'protocal' at row 1")
|
||||||
|
Traceback (most recent call last):
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\django\db\backends\utils.py", line 105, in _execute
|
||||||
|
return self.cursor.execute(sql, params)
|
||||||
|
~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\django\db\backends\mysql\base.py", line 78, in execute
|
||||||
|
return self.cursor.execute(query, args)
|
||||||
|
~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\MySQLdb\cursors.py", line 179, in execute
|
||||||
|
res = self._query(mogrified_query)
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\MySQLdb\cursors.py", line 330, in _query
|
||||||
|
db.query(q)
|
||||||
|
~~~~~~~~^^^
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\MySQLdb\connections.py", line 286, in query
|
||||||
|
_mysql.connection.query(self, query)
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^
|
||||||
|
MySQLdb.DataError: (1406, "Data too long for column 'protocal' at row 1")
|
||||||
|
|
||||||
|
The above exception was the direct cause of the following exception:
|
||||||
|
|
||||||
|
Traceback (most recent call last):
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\ninja_extra\operation.py", line 217, in run
|
||||||
|
result = self.view_func(request, **ctx.kwargs["view_func_kwargs"])
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\ninja_extra\controllers\route\route_functions.py", line 108, in as_view
|
||||||
|
result = self.route.view_func(
|
||||||
|
ctx.controller_instance, *args, **ctx.view_func_kwargs
|
||||||
|
)
|
||||||
|
File "D:\programs\uv\python\cpython-3.13.11-windows-x86_64-none\Lib\contextlib.py", line 85, in inner
|
||||||
|
return func(*args, **kwds)
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\apps\project\controllers\design.py", line 100, in create_design
|
||||||
|
qs = Design.objects.create(**asert_dict)
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\django\db\models\manager.py", line 87, in manager_method
|
||||||
|
return getattr(self.get_queryset(), name)(*args, **kwargs)
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\django\db\models\query.py", line 669, in create
|
||||||
|
obj.save(force_insert=True, using=self.db)
|
||||||
|
~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\django\db\models\base.py", line 874, in save
|
||||||
|
self.save_base(
|
||||||
|
~~~~~~~~~~~~~~^
|
||||||
|
using=using,
|
||||||
|
^^^^^^^^^^^^
|
||||||
|
...<2 lines>...
|
||||||
|
update_fields=update_fields,
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
)
|
||||||
|
^
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\django\db\models\base.py", line 966, in save_base
|
||||||
|
updated = self._save_table(
|
||||||
|
raw,
|
||||||
|
...<4 lines>...
|
||||||
|
update_fields,
|
||||||
|
)
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\django\db\models\base.py", line 1169, in _save_table
|
||||||
|
results = self._do_insert(
|
||||||
|
cls._base_manager, using, insert_fields, returning_fields, raw
|
||||||
|
)
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\django\db\models\base.py", line 1220, in _do_insert
|
||||||
|
return manager._insert(
|
||||||
|
~~~~~~~~~~~~~~~^
|
||||||
|
[self],
|
||||||
|
^^^^^^^
|
||||||
|
...<3 lines>...
|
||||||
|
raw=raw,
|
||||||
|
^^^^^^^^
|
||||||
|
)
|
||||||
|
^
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\django\db\models\manager.py", line 87, in manager_method
|
||||||
|
return getattr(self.get_queryset(), name)(*args, **kwargs)
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\django\db\models\query.py", line 1918, in _insert
|
||||||
|
return query.get_compiler(using=using).execute_sql(returning_fields)
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\django\db\models\sql\compiler.py", line 1925, in execute_sql
|
||||||
|
cursor.execute(sql, params)
|
||||||
|
~~~~~~~~~~~~~~^^^^^^^^^^^^^
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\django\db\backends\utils.py", line 122, in execute
|
||||||
|
return super().execute(sql, params)
|
||||||
|
~~~~~~~~~~~~~~~^^^^^^^^^^^^^
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\django\db\backends\utils.py", line 79, in execute
|
||||||
|
return self._execute_with_wrappers(
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~^
|
||||||
|
sql, params, many=False, executor=self._execute
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
)
|
||||||
|
^
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\django\db\backends\utils.py", line 92, in _execute_with_wrappers
|
||||||
|
return executor(sql, params, many, context)
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\django\db\backends\utils.py", line 100, in _execute
|
||||||
|
with self.db.wrap_database_errors:
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\django\db\utils.py", line 94, in __exit__
|
||||||
|
raise dj_exc_value.with_traceback(traceback) from exc_value
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\django\db\backends\utils.py", line 105, in _execute
|
||||||
|
return self.cursor.execute(sql, params)
|
||||||
|
~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\django\db\backends\mysql\base.py", line 78, in execute
|
||||||
|
return self.cursor.execute(query, args)
|
||||||
|
~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\MySQLdb\cursors.py", line 179, in execute
|
||||||
|
res = self._query(mogrified_query)
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\MySQLdb\cursors.py", line 330, in _query
|
||||||
|
db.query(q)
|
||||||
|
~~~~~~~~^^^
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\MySQLdb\connections.py", line 286, in query
|
||||||
|
_mysql.connection.query(self, query)
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^
|
||||||
|
django.db.utils.DataError: (1406, "Data too long for column 'protocal' at row 1")
|
||||||
|
[ERROR][2026-04-20 10:34:26,484][log.py:249]Internal Server Error: /api/project/designDemand/save
|
||||||
|
[WARNING][2026-04-20 10:35:26,599][operation.py:136]"POST - DesignController[create_design] /api/project/designDemand/save" (1406, "Data too long for column 'protocal' at row 1")
|
||||||
|
[ERROR][2026-04-20 10:35:26,599][errors.py:131](1406, "Data too long for column 'protocal' at row 1")
|
||||||
|
Traceback (most recent call last):
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\django\db\backends\utils.py", line 105, in _execute
|
||||||
|
return self.cursor.execute(sql, params)
|
||||||
|
~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\django\db\backends\mysql\base.py", line 78, in execute
|
||||||
|
return self.cursor.execute(query, args)
|
||||||
|
~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\MySQLdb\cursors.py", line 179, in execute
|
||||||
|
res = self._query(mogrified_query)
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\MySQLdb\cursors.py", line 330, in _query
|
||||||
|
db.query(q)
|
||||||
|
~~~~~~~~^^^
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\MySQLdb\connections.py", line 286, in query
|
||||||
|
_mysql.connection.query(self, query)
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^
|
||||||
|
MySQLdb.DataError: (1406, "Data too long for column 'protocal' at row 1")
|
||||||
|
|
||||||
|
The above exception was the direct cause of the following exception:
|
||||||
|
|
||||||
|
Traceback (most recent call last):
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\ninja_extra\operation.py", line 217, in run
|
||||||
|
result = self.view_func(request, **ctx.kwargs["view_func_kwargs"])
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\ninja_extra\controllers\route\route_functions.py", line 108, in as_view
|
||||||
|
result = self.route.view_func(
|
||||||
|
ctx.controller_instance, *args, **ctx.view_func_kwargs
|
||||||
|
)
|
||||||
|
File "D:\programs\uv\python\cpython-3.13.11-windows-x86_64-none\Lib\contextlib.py", line 85, in inner
|
||||||
|
return func(*args, **kwds)
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\apps\project\controllers\design.py", line 100, in create_design
|
||||||
|
qs = Design.objects.create(**asert_dict)
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\django\db\models\manager.py", line 87, in manager_method
|
||||||
|
return getattr(self.get_queryset(), name)(*args, **kwargs)
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\django\db\models\query.py", line 669, in create
|
||||||
|
obj.save(force_insert=True, using=self.db)
|
||||||
|
~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\django\db\models\base.py", line 874, in save
|
||||||
|
self.save_base(
|
||||||
|
~~~~~~~~~~~~~~^
|
||||||
|
using=using,
|
||||||
|
^^^^^^^^^^^^
|
||||||
|
...<2 lines>...
|
||||||
|
update_fields=update_fields,
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
)
|
||||||
|
^
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\django\db\models\base.py", line 966, in save_base
|
||||||
|
updated = self._save_table(
|
||||||
|
raw,
|
||||||
|
...<4 lines>...
|
||||||
|
update_fields,
|
||||||
|
)
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\django\db\models\base.py", line 1169, in _save_table
|
||||||
|
results = self._do_insert(
|
||||||
|
cls._base_manager, using, insert_fields, returning_fields, raw
|
||||||
|
)
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\django\db\models\base.py", line 1220, in _do_insert
|
||||||
|
return manager._insert(
|
||||||
|
~~~~~~~~~~~~~~~^
|
||||||
|
[self],
|
||||||
|
^^^^^^^
|
||||||
|
...<3 lines>...
|
||||||
|
raw=raw,
|
||||||
|
^^^^^^^^
|
||||||
|
)
|
||||||
|
^
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\django\db\models\manager.py", line 87, in manager_method
|
||||||
|
return getattr(self.get_queryset(), name)(*args, **kwargs)
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\django\db\models\query.py", line 1918, in _insert
|
||||||
|
return query.get_compiler(using=using).execute_sql(returning_fields)
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\django\db\models\sql\compiler.py", line 1925, in execute_sql
|
||||||
|
cursor.execute(sql, params)
|
||||||
|
~~~~~~~~~~~~~~^^^^^^^^^^^^^
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\django\db\backends\utils.py", line 122, in execute
|
||||||
|
return super().execute(sql, params)
|
||||||
|
~~~~~~~~~~~~~~~^^^^^^^^^^^^^
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\django\db\backends\utils.py", line 79, in execute
|
||||||
|
return self._execute_with_wrappers(
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~^
|
||||||
|
sql, params, many=False, executor=self._execute
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
)
|
||||||
|
^
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\django\db\backends\utils.py", line 92, in _execute_with_wrappers
|
||||||
|
return executor(sql, params, many, context)
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\django\db\backends\utils.py", line 100, in _execute
|
||||||
|
with self.db.wrap_database_errors:
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\django\db\utils.py", line 94, in __exit__
|
||||||
|
raise dj_exc_value.with_traceback(traceback) from exc_value
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\django\db\backends\utils.py", line 105, in _execute
|
||||||
|
return self.cursor.execute(sql, params)
|
||||||
|
~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\django\db\backends\mysql\base.py", line 78, in execute
|
||||||
|
return self.cursor.execute(query, args)
|
||||||
|
~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\MySQLdb\cursors.py", line 179, in execute
|
||||||
|
res = self._query(mogrified_query)
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\MySQLdb\cursors.py", line 330, in _query
|
||||||
|
db.query(q)
|
||||||
|
~~~~~~~~^^^
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\MySQLdb\connections.py", line 286, in query
|
||||||
|
_mysql.connection.query(self, query)
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^
|
||||||
|
django.db.utils.DataError: (1406, "Data too long for column 'protocal' at row 1")
|
||||||
|
[ERROR][2026-04-20 10:35:26,608][log.py:249]Internal Server Error: /api/project/designDemand/save
|
||||||
|
[WARNING][2026-04-20 10:35:27,464][operation.py:136]"POST - DesignController[create_design] /api/project/designDemand/save" (1406, "Data too long for column 'protocal' at row 1")
|
||||||
|
[ERROR][2026-04-20 10:35:27,464][errors.py:131](1406, "Data too long for column 'protocal' at row 1")
|
||||||
|
Traceback (most recent call last):
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\django\db\backends\utils.py", line 105, in _execute
|
||||||
|
return self.cursor.execute(sql, params)
|
||||||
|
~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\django\db\backends\mysql\base.py", line 78, in execute
|
||||||
|
return self.cursor.execute(query, args)
|
||||||
|
~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\MySQLdb\cursors.py", line 179, in execute
|
||||||
|
res = self._query(mogrified_query)
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\MySQLdb\cursors.py", line 330, in _query
|
||||||
|
db.query(q)
|
||||||
|
~~~~~~~~^^^
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\MySQLdb\connections.py", line 286, in query
|
||||||
|
_mysql.connection.query(self, query)
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^
|
||||||
|
MySQLdb.DataError: (1406, "Data too long for column 'protocal' at row 1")
|
||||||
|
|
||||||
|
The above exception was the direct cause of the following exception:
|
||||||
|
|
||||||
|
Traceback (most recent call last):
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\ninja_extra\operation.py", line 217, in run
|
||||||
|
result = self.view_func(request, **ctx.kwargs["view_func_kwargs"])
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\ninja_extra\controllers\route\route_functions.py", line 108, in as_view
|
||||||
|
result = self.route.view_func(
|
||||||
|
ctx.controller_instance, *args, **ctx.view_func_kwargs
|
||||||
|
)
|
||||||
|
File "D:\programs\uv\python\cpython-3.13.11-windows-x86_64-none\Lib\contextlib.py", line 85, in inner
|
||||||
|
return func(*args, **kwds)
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\apps\project\controllers\design.py", line 100, in create_design
|
||||||
|
qs = Design.objects.create(**asert_dict)
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\django\db\models\manager.py", line 87, in manager_method
|
||||||
|
return getattr(self.get_queryset(), name)(*args, **kwargs)
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\django\db\models\query.py", line 669, in create
|
||||||
|
obj.save(force_insert=True, using=self.db)
|
||||||
|
~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\django\db\models\base.py", line 874, in save
|
||||||
|
self.save_base(
|
||||||
|
~~~~~~~~~~~~~~^
|
||||||
|
using=using,
|
||||||
|
^^^^^^^^^^^^
|
||||||
|
...<2 lines>...
|
||||||
|
update_fields=update_fields,
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
)
|
||||||
|
^
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\django\db\models\base.py", line 966, in save_base
|
||||||
|
updated = self._save_table(
|
||||||
|
raw,
|
||||||
|
...<4 lines>...
|
||||||
|
update_fields,
|
||||||
|
)
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\django\db\models\base.py", line 1169, in _save_table
|
||||||
|
results = self._do_insert(
|
||||||
|
cls._base_manager, using, insert_fields, returning_fields, raw
|
||||||
|
)
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\django\db\models\base.py", line 1220, in _do_insert
|
||||||
|
return manager._insert(
|
||||||
|
~~~~~~~~~~~~~~~^
|
||||||
|
[self],
|
||||||
|
^^^^^^^
|
||||||
|
...<3 lines>...
|
||||||
|
raw=raw,
|
||||||
|
^^^^^^^^
|
||||||
|
)
|
||||||
|
^
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\django\db\models\manager.py", line 87, in manager_method
|
||||||
|
return getattr(self.get_queryset(), name)(*args, **kwargs)
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\django\db\models\query.py", line 1918, in _insert
|
||||||
|
return query.get_compiler(using=using).execute_sql(returning_fields)
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\django\db\models\sql\compiler.py", line 1925, in execute_sql
|
||||||
|
cursor.execute(sql, params)
|
||||||
|
~~~~~~~~~~~~~~^^^^^^^^^^^^^
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\django\db\backends\utils.py", line 122, in execute
|
||||||
|
return super().execute(sql, params)
|
||||||
|
~~~~~~~~~~~~~~~^^^^^^^^^^^^^
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\django\db\backends\utils.py", line 79, in execute
|
||||||
|
return self._execute_with_wrappers(
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~^
|
||||||
|
sql, params, many=False, executor=self._execute
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
)
|
||||||
|
^
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\django\db\backends\utils.py", line 92, in _execute_with_wrappers
|
||||||
|
return executor(sql, params, many, context)
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\django\db\backends\utils.py", line 100, in _execute
|
||||||
|
with self.db.wrap_database_errors:
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\django\db\utils.py", line 94, in __exit__
|
||||||
|
raise dj_exc_value.with_traceback(traceback) from exc_value
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\django\db\backends\utils.py", line 105, in _execute
|
||||||
|
return self.cursor.execute(sql, params)
|
||||||
|
~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\django\db\backends\mysql\base.py", line 78, in execute
|
||||||
|
return self.cursor.execute(query, args)
|
||||||
|
~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\MySQLdb\cursors.py", line 179, in execute
|
||||||
|
res = self._query(mogrified_query)
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\MySQLdb\cursors.py", line 330, in _query
|
||||||
|
db.query(q)
|
||||||
|
~~~~~~~~^^^
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\MySQLdb\connections.py", line 286, in query
|
||||||
|
_mysql.connection.query(self, query)
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^
|
||||||
|
django.db.utils.DataError: (1406, "Data too long for column 'protocal' at row 1")
|
||||||
|
[ERROR][2026-04-20 10:35:27,473][log.py:249]Internal Server Error: /api/project/designDemand/save
|
||||||
|
[WARNING][2026-04-20 10:35:27,981][operation.py:136]"POST - DesignController[create_design] /api/project/designDemand/save" (1406, "Data too long for column 'protocal' at row 1")
|
||||||
|
[ERROR][2026-04-20 10:35:27,981][errors.py:131](1406, "Data too long for column 'protocal' at row 1")
|
||||||
|
Traceback (most recent call last):
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\django\db\backends\utils.py", line 105, in _execute
|
||||||
|
return self.cursor.execute(sql, params)
|
||||||
|
~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\django\db\backends\mysql\base.py", line 78, in execute
|
||||||
|
return self.cursor.execute(query, args)
|
||||||
|
~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\MySQLdb\cursors.py", line 179, in execute
|
||||||
|
res = self._query(mogrified_query)
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\MySQLdb\cursors.py", line 330, in _query
|
||||||
|
db.query(q)
|
||||||
|
~~~~~~~~^^^
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\MySQLdb\connections.py", line 286, in query
|
||||||
|
_mysql.connection.query(self, query)
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^
|
||||||
|
MySQLdb.DataError: (1406, "Data too long for column 'protocal' at row 1")
|
||||||
|
|
||||||
|
The above exception was the direct cause of the following exception:
|
||||||
|
|
||||||
|
Traceback (most recent call last):
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\ninja_extra\operation.py", line 217, in run
|
||||||
|
result = self.view_func(request, **ctx.kwargs["view_func_kwargs"])
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\ninja_extra\controllers\route\route_functions.py", line 108, in as_view
|
||||||
|
result = self.route.view_func(
|
||||||
|
ctx.controller_instance, *args, **ctx.view_func_kwargs
|
||||||
|
)
|
||||||
|
File "D:\programs\uv\python\cpython-3.13.11-windows-x86_64-none\Lib\contextlib.py", line 85, in inner
|
||||||
|
return func(*args, **kwds)
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\apps\project\controllers\design.py", line 100, in create_design
|
||||||
|
qs = Design.objects.create(**asert_dict)
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\django\db\models\manager.py", line 87, in manager_method
|
||||||
|
return getattr(self.get_queryset(), name)(*args, **kwargs)
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\django\db\models\query.py", line 669, in create
|
||||||
|
obj.save(force_insert=True, using=self.db)
|
||||||
|
~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\django\db\models\base.py", line 874, in save
|
||||||
|
self.save_base(
|
||||||
|
~~~~~~~~~~~~~~^
|
||||||
|
using=using,
|
||||||
|
^^^^^^^^^^^^
|
||||||
|
...<2 lines>...
|
||||||
|
update_fields=update_fields,
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
)
|
||||||
|
^
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\django\db\models\base.py", line 966, in save_base
|
||||||
|
updated = self._save_table(
|
||||||
|
raw,
|
||||||
|
...<4 lines>...
|
||||||
|
update_fields,
|
||||||
|
)
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\django\db\models\base.py", line 1169, in _save_table
|
||||||
|
results = self._do_insert(
|
||||||
|
cls._base_manager, using, insert_fields, returning_fields, raw
|
||||||
|
)
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\django\db\models\base.py", line 1220, in _do_insert
|
||||||
|
return manager._insert(
|
||||||
|
~~~~~~~~~~~~~~~^
|
||||||
|
[self],
|
||||||
|
^^^^^^^
|
||||||
|
...<3 lines>...
|
||||||
|
raw=raw,
|
||||||
|
^^^^^^^^
|
||||||
|
)
|
||||||
|
^
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\django\db\models\manager.py", line 87, in manager_method
|
||||||
|
return getattr(self.get_queryset(), name)(*args, **kwargs)
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\django\db\models\query.py", line 1918, in _insert
|
||||||
|
return query.get_compiler(using=using).execute_sql(returning_fields)
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\django\db\models\sql\compiler.py", line 1925, in execute_sql
|
||||||
|
cursor.execute(sql, params)
|
||||||
|
~~~~~~~~~~~~~~^^^^^^^^^^^^^
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\django\db\backends\utils.py", line 122, in execute
|
||||||
|
return super().execute(sql, params)
|
||||||
|
~~~~~~~~~~~~~~~^^^^^^^^^^^^^
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\django\db\backends\utils.py", line 79, in execute
|
||||||
|
return self._execute_with_wrappers(
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~^
|
||||||
|
sql, params, many=False, executor=self._execute
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
)
|
||||||
|
^
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\django\db\backends\utils.py", line 92, in _execute_with_wrappers
|
||||||
|
return executor(sql, params, many, context)
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\django\db\backends\utils.py", line 100, in _execute
|
||||||
|
with self.db.wrap_database_errors:
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\django\db\utils.py", line 94, in __exit__
|
||||||
|
raise dj_exc_value.with_traceback(traceback) from exc_value
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\django\db\backends\utils.py", line 105, in _execute
|
||||||
|
return self.cursor.execute(sql, params)
|
||||||
|
~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\django\db\backends\mysql\base.py", line 78, in execute
|
||||||
|
return self.cursor.execute(query, args)
|
||||||
|
~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\MySQLdb\cursors.py", line 179, in execute
|
||||||
|
res = self._query(mogrified_query)
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\MySQLdb\cursors.py", line 330, in _query
|
||||||
|
db.query(q)
|
||||||
|
~~~~~~~~^^^
|
||||||
|
File "E:\pycharmProjects\cdtestplant_v1\.venv\Lib\site-packages\MySQLdb\connections.py", line 286, in query
|
||||||
|
_mysql.connection.query(self, query)
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^
|
||||||
|
django.db.utils.DataError: (1406, "Data too long for column 'protocal' at row 1")
|
||||||
|
[ERROR][2026-04-20 10:35:27,991][log.py:249]Internal Server Error: /api/project/designDemand/save
|
||||||
|
[WARNING][2026-04-20 10:45:28,053][log.py:249]Bad Request: /api/project/editDesignDemand/4028
|
||||||
|
[ERROR][2026-04-20 17:05:17,173][log.py:249]Internal Server Error: /api/project/case/create_by_demand
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
media/R2601/final_seitai/测评报告.docx
Normal file
BIN
media/R2601/final_seitai/测评报告.docx
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
media/R2601/final_seitai/第二轮回归测试记录.docx
Normal file
BIN
media/R2601/final_seitai/第二轮回归测试记录.docx
Normal file
Binary file not shown.
BIN
media/R2601/final_seitai/第二轮回归测试说明.docx
Normal file
BIN
media/R2601/final_seitai/第二轮回归测试说明.docx
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user