mirror of
https://github.com/fastapiadmin/FastapiAdmin.git
synced 2026-09-22 21:06:32 +00:00
refactor(backend): 重构数据库模型和初始化逻辑 fix(frontend): 修复权限指令在多个组件中的使用问题 perf(backend): 优化数据库连接和初始化性能 docs: 更新低代码生成器的README文档 style: 清理无用代码和注释 chore: 移除不再需要的依赖项 test: 更新用户权限相关测试用例 ci: 更新CI配置以支持新的权限检查 build: 更新依赖项版本
93 lines
3.9 KiB
Django/Jinja
93 lines
3.9 KiB
Django/Jinja
# -*- coding:utf-8 -*-
|
|
|
|
from typing import List, Optional
|
|
from sqlalchemy import delete, func, select, update
|
|
from sqlalchemy.ext.asyncio import AsyncSession
|
|
from sqlalchemy.orm import selectinload
|
|
from {{ packageName }}.model.{{ tableName }}_model import {{ tableName|snake_to_pascal_case }}Model
|
|
from {{ packageName }}.schema import {{ tableName|snake_to_pascal_case }}CreateSchema, {{ tableName|snake_to_pascal_case }}UpdateSchema
|
|
from app.core.base_crud import CRUDBase
|
|
from app.api.v1.module_system.auth.schema import AuthSchema
|
|
|
|
|
|
class {{ tableName|snake_to_pascal_case }}Dao(CRUDBase[{{ tableName|snake_to_pascal_case }}Model, {{ tableName|snake_to_pascal_case }}CreateSchema, {{ tableName|snake_to_pascal_case }}UpdateSchema]):
|
|
"""
|
|
{{ functionName }}模块数据库操作层
|
|
"""
|
|
|
|
def __init__(self, auth: AuthSchema) -> None:
|
|
"""初始化CRUD"""
|
|
super().__init__(model={{ tableName|snake_to_pascal_case }}Model, auth=auth)
|
|
|
|
async def get_{{ tableName }}_by_id(self, db: AsyncSession, {{ tableName }}_id: int):
|
|
"""
|
|
根据{{ tableName }}id获取{{ functionName }}信息
|
|
|
|
:param db: orm对象
|
|
:param {{ tableName }}_id: {{ tableName }}id
|
|
:return: {{ functionName }}信息对象
|
|
"""
|
|
{{ tableName }}_info = (
|
|
(
|
|
await db.execute(
|
|
select({{ tableName|snake_to_pascal_case }}Model)
|
|
.where({{ tableName|snake_to_pascal_case }}Model.id == {{ tableName }}_id)
|
|
)
|
|
)
|
|
.scalars()
|
|
.first()
|
|
)
|
|
|
|
return {{ tableName }}_info
|
|
|
|
async def get_{{ tableName }}_list(self, db: AsyncSession, search: {{ tableName|snake_to_pascal_case }}QueryParam = None, order_by: Optional[str] = None):
|
|
"""
|
|
根据查询参数获取{{ functionName }}列表信息
|
|
|
|
:param db: orm对象
|
|
:param search: 查询参数对象
|
|
:param order_by: 排序字段
|
|
:return: {{ functionName }}列表信息对象
|
|
"""
|
|
query = select({{ tableName|snake_to_pascal_case }}Model)
|
|
|
|
# 添加查询条件
|
|
if search and hasattr(search, '__dict__'):
|
|
for attr, value in search.__dict__.items():
|
|
if value is not None and hasattr({{ tableName|snake_to_pascal_case }}Model, attr):
|
|
if isinstance(value, tuple) and len(value) == 2:
|
|
operator, val = value
|
|
if operator == "like":
|
|
query = query.where(getattr({{ tableName|snake_to_pascal_case }}Model, attr).like(f"%{val}%"))
|
|
elif operator == "between":
|
|
query = query.where(getattr({{ tableName|snake_to_pascal_case }}Model, attr).between(val[0], val[1]))
|
|
else:
|
|
query = query.where(getattr({{ tableName|snake_to_pascal_case }}Model, attr) == val)
|
|
else:
|
|
query = query.where(getattr({{ tableName|snake_to_pascal_case }}Model, attr) == value)
|
|
|
|
# 添加排序
|
|
if order_by:
|
|
# 这里应该解析order_by参数并应用排序
|
|
query = query.order_by({{ tableName|snake_to_pascal_case }}Model.created_at.desc())
|
|
else:
|
|
query = query.order_by({{ tableName|snake_to_pascal_case }}Model.id.desc())
|
|
|
|
# 执行查询
|
|
result = await db.execute(query)
|
|
all_data = list(result.scalars().all())
|
|
|
|
return all_data
|
|
|
|
async def delete(self, db: AsyncSession, ids: List[int]) -> int:
|
|
"""
|
|
删除{{ functionName }}信息
|
|
|
|
:param db: orm对象
|
|
:param ids: {{ functionName }}id列表
|
|
:return: 删除的记录数
|
|
"""
|
|
result = await db.execute(
|
|
delete({{ tableName|snake_to_pascal_case }}Model).where({{ tableName|snake_to_pascal_case }}Model.id.in_(ids))
|
|
)
|
|
return result.rowcount |