You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 13:01:02