61 lines
2.5 KiB
Mako
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 |