部分类型
Prisma Client Python 公开了在生成时基于模式定义的模型创建部分模型的接口,有关更多信息,请参阅 部分类型的入门。
模式中定义的每个模型都可以根据它生成部分类型。API 看起来像这样
class Model:
@staticmethod
def create_partial(
name: str,
include: Optional[Iterable['{{ model }}Keys']] = None,
exclude: Optional[Iterable['{{ model }}Keys']] = None,
required: Optional[Iterable['{{ model }}Keys']] = None,
optional: Optional[Iterable['{{ model }}Keys']] = None,
relations: Optional[Mapping['{{ model }}RelationalKeys', str]] = None,
exclude_relational_fields: bool = False,
) -> None:
...
其中 {{ model }}Keys
和 {{ model }}RelationalKeys
是 Literal 类型,分别包含模型的所有字段和模型的所有关联字段。
例如
model User {
id String @default(cuid()) @id
name String
posts Post[]
email String?
}
UserKeys = Literal['id', 'name', 'posts', 'email']
UserRelationalKeys = Literal['posts']
参考
name
- 生成的局部类型的名称,必须是唯一的。
include
- 一个可迭代的字段名称列表,这些字段将在生成的模型中可用。不能与
exclude
同时使用。 exclude
- 一个可迭代的字段名称列表,这些字段不会在生成的模型中可用。不能与
include
同时使用。 required
- 一个可迭代的字段名称列表,这些字段不会在生成的模型中被标记为可选。
optional
- 一个可迭代的字段名称列表,这些字段将在生成的模型中被标记为可选。
relations
- 一个关联字段名称到自定义局部模型的映射。(不能与
exclude_relational_fields
同时使用) exclude_relational_fields
- 一个布尔值,指示是否应该在生成的模型中包含关联字段。
示例
所有示例都使用以下模型
model User {
id String @default(cuid()) @id
name String
profile Profile?
email String?
}
model Profile {
id Int @id @default(autoincrement())
user User @relation(fields: [user_id], references: [id])
user_id String
bio String
}
class User:
id: str
name: str
profile: Optional['Profile']
email: Optional[str]
class Profile:
id: int
user: Optional['User']
user_id: str
bio: str
包含
from prisma.models import User
User.create_partial('UserOnlyName', include={'name'})
User.create_partial('UserOnlyNameAndEmail', include={'name', 'email'})
class UserOnlyName:
name: str
class UserOnlyNameAndEmail:
name: str
email: Optional[str]
排除
from prisma.models import User
User.create_partial('UserWithoutProfile', exclude=['profile'])
class UserWithoutProfile:
id: str
name: str
email: Optional[str]
可选
from prisma.models import User
User.create_partial('UserOptionalName', optional={'name'})
class UserOptionalName:
id: str
name: Optional[str]
profile: Optional['Profile']
email: Optional[str]
必需
from prisma.models import User
User.create_partial('UserRequiredEmail', required={'email'})
class UserRequiredEmail:
id: str
name: str
profile: Optional['Profile']
email: str
关系
from prisma.models import User, Profile
Profile.create_partial('ProfileWithoutUser', exclude={'user'})
User.create_partial('UserCustomProfile', relations={'profile': 'ProfileWithoutUser'})
class UserCustomProfile:
id: str
name: str
profile: Optional['partials.ProfileWithoutUser']
email: Optionalstr]
排除关系字段
from prisma.models import User
User.create_partial('UserWithoutRelations', exclude_relational_fields=True)
class UserWithoutRelations:
id: str
name: str
email: Optional[str]