跳至内容

部分类型

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 }}RelationalKeysLiteral 类型,分别包含模型的所有字段和模型的所有关联字段。

例如

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]