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
相关产品推荐
相关产品推荐

