在Tortoise ORM中如何设置CharField唯一非空?是否有邮箱类型字段?
Tortoise ORM 相关问题解答
1. CharField 同时设置 unique 和 nullable=False 是否可行?
完全可以,你给出的代码写法是正确的。unique=True 会让数据库为该字段创建唯一索引,确保所有记录的 username 值不重复;nullable=False 则会在数据库层面添加 NOT NULL 约束,强制该字段必须有值。这两个参数兼容无冲突,能实现你想要的效果。
对应的模型代码示例:
class User(Model): id = fields.IntField(pk=True) username = fields.CharField(max_length=128, unique=True, nullable=False)
2. 是否有专门的邮箱类型字段?
Tortoise ORM 没有内置的专属邮箱类型字段。如果需要存储邮箱地址,推荐使用 CharField,同时可以通过添加验证器来确保输入内容符合邮箱格式。
比如结合 pydantic 的 EmailStr 做格式校验:
from pydantic import EmailStr, ValidationError from tortoise import fields, Model def validate_email(value: str): try: EmailStr(value) except ValidationError: raise ValueError("Invalid email format") class User(Model): id = fields.IntField(pk=True) email = fields.CharField(max_length=255, unique=True, nullable=False, validators=[validate_email])
或者自定义简单的验证器类:
from tortoise import fields, Model from tortoise.validators import Validator class EmailValidator(Validator): def __call__(self, value: str): parts = value.split("@") if len(parts) != 2 or "." not in parts[-1]: raise ValueError("Invalid email format") class User(Model): id = fields.IntField(pk=True) email = fields.CharField(max_length=255, unique=True, nullable=False, validators=[EmailValidator()])
内容的提问来源于stack exchange,提问作者Diego L
相关产品推荐
相关产品推荐

