Files
2026-04-08 15:27:08 +08:00

122 lines
2.6 KiB
Python

from ninja import Schema
from datetime import datetime
from typing import Optional, List
class LinkCategorySchema(Schema):
id: int
name: str
code: str
order: int
is_active: bool
created_at: Optional[datetime] = None
class FriendLinkSchema(Schema):
id: int
category_id: int
name: str
url: str
order: int
is_active: bool
created_at: Optional[datetime] = None
class LinkCategoryCreateSchema(Schema):
name: str
code: str
order: int = 0
is_active: bool = True
class FriendLinkCreateSchema(Schema):
category_id: int
name: str
url: str
order: int = 0
is_active: bool = True
# ================= 响应模式 (Output) =================
class PictureLinkSchema(Schema):
id: int
name: str
picture: str # 这里返回的是图片路径字符串
url: str
order: int
is_active: bool
created_at: datetime
updated_at: datetime
class Config:
# 如果你的 Model 字段和 Schema 字段名一致,通常不需要 orm_mode
# 但为了保险,或者如果你直接返回 Model 实例,建议开启
from_attributes = True
# ================= 请求模式 (Input) =================
class PictureLinkCreateSchema(Schema):
name: str
picture: str
url: str
order: int = 0
is_active: bool = True
class PictureLinkUpdateSchema(Schema):
name: Optional[str] = None
picture: Optional[str] = None
url: Optional[str] = None
order: Optional[int] = None
is_active: Optional[bool] = None
class MainMenuBase(Schema):
"""基础菜单字段"""
title: str
code: str
url: str = ""
is_external: bool = False
is_carousel: bool = False
order: int = 0
visible: bool = True
class MainMenuCreate(MainMenuBase):
"""创建时的 Schema"""
parent_id: Optional[int] = None
class MainMenuUpdate(MainMenuBase):
"""更新时的 Schema"""
parent_id: Optional[int] = None
class MainMenuOut(MainMenuBase):
"""输出用的 Schema,包含 ID 和递归的子菜单"""
id: int
parent_id: Optional[int] = None
children: List['MainMenuOut'] = [] # 递归引用自身
# 告诉 Pydantic 如何处理递归模型
MainMenuOut.model_rebuild()
class BaseInfoIn(Schema):
title: str
e_title: str
address: str
postal: Optional[str] = ""
telephone: Optional[str] = ""
fax: Optional[str] = ""
unit: Optional[str] = ""
filing: Optional[str] = ""
is_active: bool = False
class BaseInfoOut(BaseInfoIn):
id: int
official_account: Optional[str] = None
weibo: Optional[str] = None