Files
2026-06-25 17:41:06 +08:00

61 lines
2.5 KiB
Mako

<%
schema_name = entity.name.capitalize() + 'Schema'
create_schema_name = entity.name.capitalize() + 'Create'
update_schema_name = entity.name.capitalize() + 'Update'
relations = generator._process_relations(entity)
%>
from pydantic import BaseModel
from typing import Optional, List
from datetime import datetime
class ${schema_name}(BaseModel):
"""
${entity.description or schema_name + ' 返回模型'}
包含所有字段和关联字段
"""
id: int
% for field in entity.fields:
${field['name']}: ${'str' if field['type'] == 'String' else 'int' if field['type'] in ('Long', 'Integer') else 'bool' if field['type'] == 'Boolean' else 'datetime' if field['type'] == 'DateTime' else 'str'}
% endfor
# 关联字段
% for rel in relations:
% if rel['type'] in ('one-to-many', 'many-to-many'):
${rel['name']}: List['${rel['target'].capitalize()}Schema'] = []
% elif rel['type'] == 'many-to-one':
${rel['name']}: Optional['${rel['target'].capitalize()}Schema'] = None
% endif
% endfor
class Config:
orm_mode = True
schema_extra = {
"example": {
"id": 1,
% for field in entity.fields:
"${field['name']}": ${'"sample"' if field['type'] == 'String' else 1 if field['type'] in ('Long', 'Integer') else True if field['type'] == 'Boolean' else '"2023-01-01T00:00:00"' if field['type'] == 'DateTime' else '"sample"'},
% endfor
}
}
class ${create_schema_name}(BaseModel):
"""
${entity.description or create_schema_name + ' 创建模型'}
不包含只读字段
"""
% for field in entity.fields:
% if not hasattr(field, 'primary_key') or not field['primary_key']:
${field['name']}: ${'str' if field['type'] == 'String' else 'int' if field['type'] in ('Long', 'Integer') else 'bool' if field['type'] == 'Boolean' else 'datetime' if field['type'] == 'DateTime' else 'str'}
% endif
% endfor
class ${update_schema_name}(BaseModel):
"""
${entity.description or update_schema_name + ' 更新模型'}
所有字段都是可选的
"""
% for field in entity.fields:
% if not hasattr(field, 'primary_key') or not field['primary_key']:
${field['name']}: Optional[${'str' if field['type'] == 'String' else 'int' if field['type'] in ('Long', 'Integer') else 'bool' if field['type'] == 'Boolean' else 'datetime' if field['type'] == 'DateTime' else 'str'}]
% endif
% endfor