Files
FastapiAdmin/backend/templates/python/schema.py.jinja2
T
zhangtao 8b63042ecf feat(generator): add python plugin template and fix frontend static path
1. 新增python包初始化模板和插件元数据模板
2. 修复前端静态文件挂载路径硬编码问题,使用配置中的FRONTEND_DIST_DIR
3. 优化代码生成模板中日期验证器的计算逻辑,改用jinja2过滤器一次性计算
4. 新增toml文件的文件图标适配
5. 更新文档说明代码生成后需要重启后端以及静态托管的注意事项
2026-09-10 21:22:09 +08:00

83 lines
5.1 KiB
Django/Jinja

# -*- coding: utf-8 -*-
from pydantic import BaseModel, ConfigDict, Field
{% for import_stmt in schema_import_list %}
{{ import_stmt }}
{% endfor %}
from app.core.base_schema import BaseSchema, UserBySchema, BaseQueryParam, UserByQueryParam
{% set has_date_validator = columns | selectattr('python_type', 'equalto', 'date') | list | length > 0 %}
{% set has_time_validator = columns | selectattr('python_type', 'equalto', 'time') | list | length > 0 %}
{% set has_datetime_validator = columns | selectattr('python_type', 'equalto', 'datetime') | list | length > 0 %}
{% if has_date_validator or has_time_validator or has_datetime_validator %}
from app.core.validator import {% if has_date_validator %}DateStr{% endif %}{% if has_time_validator %}{% if has_date_validator %}, {% endif %}TimeStr{% endif %}{% if has_datetime_validator %}{% if has_date_validator or has_time_validator %}, {% endif %}DateTimeStr{% endif %}
{% endif %}
class {{ class_name }}CreateSchema(BaseModel):
"""
{{ function_name }}新增模型
"""
{% for column in columns %}
{% if column.column_name not in ['uuid', 'tenant_id', 'created_time', 'updated_time', 'created_id', 'updated_id', 'is_deleted', 'deleted_time', 'deleted_id'] and column.column_name != pk_column_name %}
{% if column.column_name == 'status' %}
{{ column.column_name }}: {{ column.python_type }} = Field(default={% if column.python_type == "str" %}"0"{% else %}0{% endif %}{% if column.python_type == "int" %}, ge=0, le=1{% endif %}, description='{{ column.column_comment }}')
{% elif column.column_name == 'description' %}
{{ column.column_name }}: str | None = Field(default=None, description='{{ column.column_comment }}')
{% elif column.python_type == "bool" or column.html_type == "switch" %}
{{ column.column_name }}: bool = Field(default=True, description='{{ column.column_comment }}')
{% elif column.python_type == "date" %}
{{ column.column_name }}: DateStr | None = Field(default=None, description='{{ column.column_comment }}')
{% elif column.python_type == "time" %}
{{ column.column_name }}: TimeStr | None = Field(default=None, description='{{ column.column_comment }}')
{% elif column.python_type == "datetime" %}
{{ column.column_name }}: DateTimeStr | None = Field(default=None, description='{{ column.column_comment }}')
{% elif column.is_nullable %}
{{ column.column_name }}: {{ column.python_type }} | None = Field(default=None, description='{{ column.column_comment }}')
{% else %}
{{ column.column_name }}: {{ column.python_type }} = Field(default=..., description='{{ column.column_comment }}')
{% endif %}
{% endif %}
{% endfor %}
class {{ class_name }}UpdateSchema(BaseModel):
"""
{{ function_name }}更新模型
"""
{% for column in columns %}
{% if column.column_name not in ['uuid', 'tenant_id', 'created_time', 'updated_time', 'created_id', 'updated_id', 'is_deleted', 'deleted_time', 'deleted_id'] and column.column_name != pk_column_name %}
{% if column.column_name == 'status' %}
{{ column.column_name }}: {{ column.python_type }} | None = Field(default=None{% if column.python_type == "int" %}, ge=0, le=1{% endif %}, description='{{ column.column_comment }}')
{% elif column.python_type == "date" %}
{{ column.column_name }}: DateStr | None = Field(default=None, description='{{ column.column_comment }}')
{% elif column.python_type == "time" %}
{{ column.column_name }}: TimeStr | None = Field(default=None, description='{{ column.column_comment }}')
{% elif column.python_type == "datetime" %}
{{ column.column_name }}: DateTimeStr | None = Field(default=None, description='{{ column.column_comment }}')
{% else %}
{{ column.column_name }}: {{ column.python_type }} | None = Field(default=None, description='{{ column.column_comment }}')
{% endif %}
{% endif %}
{% endfor %}
class {{ class_name }}OutSchema({{ class_name }}CreateSchema, BaseSchema, UserBySchema):
"""
{{ function_name }}响应模型
"""
model_config = ConfigDict(from_attributes=True)
class {{ class_name }}QueryParam(BaseQueryParam, UserByQueryParam):
"""{{ function_name }}查询参数"""
{% for column in columns %}
{% if column.is_query and column.column_name not in ['created_time', 'updated_time', 'created_id', 'updated_id', 'tenant_id', 'is_deleted', 'deleted_time', 'deleted_id'] %}
{% if column.python_type in ['date', 'time', 'datetime'] %}
{{ column.column_name }}_start: {% if column.python_type == 'date' %}DateStr{% elif column.python_type == 'time' %}TimeStr{% else %}DateTimeStr{% endif %} | None = Field(None, description="{{ column.column_comment }}开始")
{{ column.column_name }}_end: {% if column.python_type == 'date' %}DateStr{% elif column.python_type == 'time' %}TimeStr{% else %}DateTimeStr{% endif %} | None = Field(None, description="{{ column.column_comment }}结束")
{% else %}
{{ column.column_name }}: {{ column.python_type }} | None = Field(None, description="{{ column.column_comment }}"{% if column.query_type == 'LIKE' %}, json_schema_extra={"q": "like"}{% else %}, json_schema_extra={"q": "eq"}{% endif %})
{% endif %}
{% endif %}
{% endfor %}