Files
FastapiAdmin/backend/app/api/v1/module_common/file/schema.py
T
zhangtao d50dd9dd1e style: 移除Python文件中的编码声明并优化代码格式
refactor: 重构前端组件和样式,添加AI助手功能

docs: 更新README文档,添加ruff代码检查说明

feat: 新增AI助手相关API和前端组件

chore: 更新.gitignore文件,添加ruff缓存配置

fix: 修复前端布局和设置相关的问题

perf: 优化代码结构和性能,移除冗余代码

test: 更新测试文件,移除编码声明

build: 更新依赖版本,调整requirements.txt
2026-01-16 01:13:59 +08:00

64 lines
2.6 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
from pydantic import BaseModel, ConfigDict, Field, model_validator
from pydantic.alias_generators import to_camel
class ImportFieldModel(BaseModel):
model_config = ConfigDict(alias_generator=to_camel, from_attributes=True)
base_column: str | None = Field(description='数据库字段名', default=None)
excel_column: str | None = Field(description='excel字段名', default=None)
default_value: str | None = Field(description='默认值', default=None)
is_required: bool | None = Field(description='是否必传', default=None)
selected: bool | None = Field(description='是否勾选', default=None)
@model_validator(mode='before')
@classmethod
def _normalize(cls, data):
if isinstance(data, dict):
for key in ('base_column', 'excel_column', 'default_value'):
val = data.get(key)
if isinstance(val, str):
val = val.strip()
if val == '':
val = None
data[key] = val
# is_required 兼容转换
val = data.get('is_required')
if isinstance(val, str):
lowered = val.strip().lower()
if lowered in {'true', '1', 'y', 'yes'}:
data['is_required'] = True
elif lowered in {'false', '0', 'n', 'no'}:
data['is_required'] = False
return data
@model_validator(mode='after')
def _validate(self):
if self.selected and not (self.base_column and self.base_column.strip()):
raise ValueError('选中字段必须提供数据库字段名')
if self.is_required and not (self.excel_column and self.excel_column.strip()):
raise ValueError('必传字段必须提供excel字段名')
return self
class ImportModel(BaseModel):
model_config = ConfigDict(alias_generator=to_camel, from_attributes=True)
table_name: str | None = Field(description='表名', default=None)
sheet_name: str | None = Field(description='Sheet名', default=None)
filed_info: list[ImportFieldModel] | None = Field(description='字段关联表', default=None)
file_name: str | None = Field(description='文件名', default=None)
@model_validator(mode='after')
def _validate(self):
# excel_column 不重复(忽略 None
if self.filed_info:
seen = set()
for f in self.filed_info:
if f.excel_column:
key = f.excel_column.strip()
if key in seen:
raise ValueError('excel字段名存在重复')
seen.add(key)
return self