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

71 lines
2.5 KiB
Mako

<%
model_name = entity.name.capitalize()
relations = generator._process_relations(entity)
%>
from sqlalchemy import Column, Integer, String, ForeignKey, DateTime, Boolean
from sqlalchemy.orm import relationship
from ..database import Base
class ${model_name}(Base):
"""
${entity.description or model_name + ' 模型'}
对应数据库表: ${entity.name.lower()}s
"""
__tablename__ = "${entity.name.lower()}s"
# 主键字段
% if not any(field['primary_key'] for field in entity.fields):
id = Column(Integer, primary_key=True, index=True, doc="主键ID")
% endif
% for field in entity.fields:
## 字段定义: ${field['name']}
${field['name']} = Column(
${'String' if field['type'] == 'String' else 'Integer' if field['type'] in ('Long', 'Integer') else 'Boolean' if field['type'] == 'Boolean' else 'DateTime' if field['type'] == 'DateTime' else 'String'},
% if field['type'] == 'String' and 'length' in field:
length=${field['length']},
% endif
% if 'default' in field:
default=${field['default']},
% endif
% if 'primary_key' in field:
primary_key=True,
% endif
% if 'unique' in field and field['unique']:
unique=True,
% endif
% if 'nullable' in field and not field['nullable']:
nullable=False,
% endif
% if 'index' in field and field['index']:
index=True,
% endif
doc="${field['description'] or field['name'] + '字段'}"
)
% endfor
# 关系定义
% for rel in relations:
## ${rel['type']} 关系: ${rel['name']}
% if rel['type'] == 'one-to-many':
${rel['name']} = relationship(
"${rel['target'].capitalize()}",
back_populates="${rel['reverse_name']}",
doc="${rel['description'] or model_name + '' + rel['name']}"
)
% elif rel['type'] == 'many-to-one':
${rel['name']}_id = Column(Integer, ForeignKey("${rel['target']}s.id"))
${rel['name']} = relationship(
"${rel['target'].capitalize()}",
back_populates="${rel['reverse_name']}",
doc="${rel['description'] or '关联的' + rel['target']}"
)
% elif rel['type'] == 'many-to-many':
${rel['name']} = relationship(
"${rel['target'].capitalize()}",
secondary="${rel['through']}",
back_populates="${rel['reverse_name']}",
doc="${rel['description'] or model_name + '的多对多关联'}"
)
% endif
% endfor