fast-soy-admin-dev脚手架CRUD类的create方法

async def create(self, obj_in: CreateSchemaType, exclude: set[str] | None = None) -> ModelType:  # 创建新记录
        if isinstance(obj_in, dict):  # 创建数据的 Pydantic 模型
            obj_dict = obj_in # 将字典转换为 Pydantic 模型
        else:
            obj_dict = obj_in.model_dump(exclude_unset=True, exclude_none=True, exclude=exclude) # 排除的字段
        obj: ModelType = self.model(**obj_dict) # 创建一个新记录
        await obj.save() # 保存到数据库
        return obj # 返回新记录

这段代码定义了一个异步方法 create,用于创建新的数据库记录。以下是逐行解读:

1. async def create(self, obj_in: CreateSchemaType, exclude: set[str] | None = None) -> ModelType:

  • 作用:定义一个异步方法 create,用于创建新记录。

  • 参数
    • obj_in: CreateSchemaType:表示创建数据的 Pydantic 模型。

    • exclude: set[str] | None = None:表示需要排除的字段,可以是字符串的集合。

  • 返回值:返回创建的数据库模型对象(ModelType)。

2. if isinstance(obj_in, dict):

  • 作用判断 obj_in 是否是一个字典

  • 解释:如果 obj_in 是字典,直接使用它;否则,将其转换为字典。

3. obj_dict = obj_in

  • 作用:如果 obj_in 是字典,直接将其赋值给 obj_dict

  • 解释obj_dict 是一个字典,用于存储创建记录所需的数据。

4. else:

  • 作用:如果 obj_in 不是字典,进入 else 分支。

5. obj_dict = obj_in.model_dump(exclude_unset=True, exclude_none=True, exclude=exclude)

  • 作用obj_in(Pydantic 模型)转换为字典

  • 解释
    • model_dump 是 Pydantic 提供的方法,用于将模型转换为字典

    • exclude_unset=True:排除未设置的字段。

    • exclude_none=True:排除值为 None 的字段。

    • exclude=exclude:排除指定的字段(由 exclude 参数提供)。

6. obj: ModelType = self.model(**obj_dict)

  • 作用使用 obj_dict 创建一个新的数据库模型对象。

  • 解释
    • self.model 是数据库模型类。

    • **obj_dict 将字典中的键值对展开为关键字参数,用于初始化模型对象。

7. await obj.save()

  • 作用:将创建的模型对象保存到数据库。

  • 解释
    • save 是 Tortoise ORM 提供的方法,用于将模型对象保存到数据库。

    • await 表示这是一个异步操作,需要等待数据库操作完成。

8. return obj

  • 作用:返回创建的模型对象。

  • 解释:返回保存到数据库后的模型对象,通常包含生成的主键(如 id)。

示例

假设有一个数据库模型 Api 和对应的 Pydantic 模型 ApiCreate

from pydantic import BaseModel
from tortoise.models import Model
from tortoise.fields import IntField, CharField, BooleanField

class Api(Model):
    id = IntField(pk=True)
    name = CharField(max_length=50)
    description = CharField(max_length=200)
    active = BooleanField(default=True)

class ApiCreate(BaseModel):
    name: str
    description: str
    active: bool = True

使用 CRUDBase 创建记录:

api_controller = ApiController()  # 假设 ApiController 继承自 CRUDBase

# 前端发送的数据
data = {
    "name": "example",
    "description": "This is an example",
    "active": True
}

# 创建记录
created_api = await api_controller.create(obj_in=data)

总结

create 方法的主要流程是:

  1. 接收前端发送的数据(可以是字典或 Pydantic 模型)。

  2. 将数据转换为字典。

  3. 使用字典创建数据库模型对象。

  4. 将模型对象保存到数据库。

  5. 返回保存后的模型对象。

这种方法可以灵活地处理不同来源的数据(如前端表单数据),并通过 Pydantic 模型进行数据验证,确保数据的正确性和一致性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值