mirror of
https://github.com/fastapiadmin/FastapiAdmin.git
synced 2026-09-22 13:05:18 +00:00
- 调整前端路由前缀为 /web 并新增配置项 - 重构环境变量配置,替换旧环境文件为 dev/prod/test 版本 - 优化后端接口路由与参数校验,替换 dataclass 查询参数为 Pydantic 模型 - 整理后端导入顺序,延迟加载循环依赖模块 - 统一前端 API 调用命名,重构模块命名 - 新增多种响应类型支持,优化代码模板 - 简化后端路由装饰器写法,合并配置参数
70 lines
3.4 KiB
Django/Jinja
70 lines
3.4 KiB
Django/Jinja
# -*- coding: utf-8 -*-
|
|
|
|
{% if table.sub %}
|
|
from typing import List
|
|
{% endif %}
|
|
|
|
from pydantic import BaseModel, ConfigDict, Field, model_validator
|
|
{% for import_stmt in schema_import_list %}
|
|
{{ import_stmt }}
|
|
{% endfor %}
|
|
from app.common.enums import QueueEnum
|
|
from app.core.base_schema import BaseSchema, TenantBySchema, UserBySchema, BaseQueryParam, TenantByQueryParam, UserByQueryParam
|
|
|
|
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.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({{ class_name }}CreateSchema):
|
|
"""
|
|
{{ function_name }}更新模型
|
|
"""
|
|
...
|
|
|
|
|
|
class {{ class_name }}OutSchema({{ class_name }}CreateSchema, BaseSchema, UserBySchema, TenantBySchema):
|
|
"""
|
|
{{ function_name }}响应模型
|
|
"""
|
|
model_config = ConfigDict(from_attributes=True)
|
|
|
|
|
|
class {{ class_name }}QueryParam(BaseQueryParam, UserByQueryParam, TenantByQueryParam):
|
|
"""{{ 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'] %}
|
|
{{ column.column_name }}: {{ column.python_type }} | None = Field(None, description="{{ column.column_comment }}")
|
|
{% endif %}
|
|
{% endfor %}
|
|
|
|
@model_validator(mode="after")
|
|
def validate_query_params(self) -> "{{ class_name }}QueryParam":
|
|
{% for column in columns %}
|
|
{% if column.is_query and column.query_type == 'LIKE' and column.column_name not in ['created_time', 'updated_time', 'created_id', 'updated_id', 'tenant_id', 'is_deleted', 'deleted_time', 'deleted_id'] %}
|
|
if self.{{ column.column_name }}:
|
|
self.{{ column.column_name }} = (QueueEnum.like.value, self.{{ column.column_name }})
|
|
{% elif column.is_query and column.query_type == 'EQ' and column.column_name not in ['created_time', 'updated_time', 'created_id', 'updated_id', 'tenant_id', 'is_deleted', 'deleted_time', 'deleted_id'] %}
|
|
if self.{{ column.column_name }} is not None:
|
|
self.{{ column.column_name }} = (QueueEnum.eq.value, self.{{ column.column_name }})
|
|
{% endif %}
|
|
{% endfor %}
|
|
return self
|