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

Django自定义User模型添加ForeignKey后创建用户触发ValueError

Django自定义用户模型关联外键报错解决

错误原因

你调用create_user时传入的是Branches对象的ID(比如1),而Django的ForeignKey字段要求传入模型实例而非整数ID,这直接触发了ValueError。

分步解决方案

1. 修正创建用户的调用方式

必须传入Branches实例,而非ID:

# 先获取分支实例
branch = Branches.objects.get(name="Temp_Branch")
# 传入实例创建用户
user = AppUser.objects.create_user(email='admin@fmlk.com', branch=branch, password='your_password')

注意:你代码里写的User.objects应为AppUser.objects,自定义用户模型是AppUser,这是笔误。

2. 检查on_delete参数的正确性

你的branch字段设置了on_delete=models.SET(tempBranch),这里的tempBranch必须是返回Branches实例的可调用函数,不能是字符串或其他类型。示例:

# 定义返回默认分支的函数
def tempBranch():
    # 确保该分支已存在于数据库中
    return Branches.objects.get(name="Temp_Branch")

# 在模型中应用
branch = models.ForeignKey(Branches, on_delete=models.SET(tempBranch), null=False)

⚠️ 注意:函数名后不要加括号,需传递函数对象本身,而非调用后的结果。

3. 移除冗余的password字段

AppUser继承自AbstractUser,父类已包含password字段,你自定义的password = models.CharField(max_length=255)会覆盖父类字段,可能导致密码加密等功能异常,建议直接删除该字段。

4. 验证超级用户创建逻辑

创建超级用户时同样需要传入Branches实例,示例:

branch = Branches.objects.get(name="Temp_Branch")
superuser = AppUser.objects.create_superuser(email='super@fmlk.com', branch=branch, password='super_password')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 13:55:31