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

Django post_save信号报错:expected string or bytes-like object求助

问题排查与解决

核心错误点

你的用户管理器create_user方法里存在明显逻辑错误:

name = self.normalize_email(name)

normalize_email是Django专门用于标准化邮箱地址的方法,它会对邮箱字符串做格式处理(比如转换小写、处理域名等),但你却把用户名name传入了这个方法。当传入的字符串不是合法邮箱格式时,该方法内部的解析逻辑会出错,最终在user.save()触发模型验证/数据库写入时抛出expected string or bytes-like object异常。

修复方案

直接删除这行错误的代码,因为用户名不需要用邮箱标准化方法处理:

def create_user(self, name, email, password, **extra_fields):
    """
    Create and save a User with the given email and password.
    """
    if not email:
        raise ValueError(_('The Email must be set'))
    # 移除错误的name标准化行
    email = self.normalize_email(email)
    user = self.model(name=name, email=email, **extra_fields)
    user.set_password(password)
    user.save()
    return user

额外排查方向

如果修复后仍有问题,可以从以下方向继续排查:

  • 检查CustomUser模型的name字段定义,确认它是CharField等字符串类型,没有误加邮箱验证器或其他特殊约束。
  • 验证schema_context(tenant)是否正确切换了租户:确认tenant对象的schema名称有效,且该schema已在数据库中创建。
  • 查看完整的报错堆栈追踪,定位到异常的具体触发位置(比如是模型字段验证、数据库驱动层还是其他环节),这能更精准定位问题。

内容的提问来源于stack exchange,提问作者Jon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 13:54:37