You need to enable JavaScript to run this app. 使用Model Bakery创建Person实例触发Django外键约束错误如何解决?
优惠活动
大模型
产品
解决方案
定价
更多

使用Model Bakery创建Person实例触发Django外键约束错误如何解决?

错误原因

你在baker_recipes.py中直接创建了未写入数据库的User内存实例test_user,再将该实例绑定到Person的Recipe中。这个User实例没有执行save()操作入库,不存在于测试库的auth_user表中,也没有合法的主键ID。
当调用baker.make_recipe创建Person实例时,Model Bakery会直接取用你传入的未入库User实例的ID作为外键值写入Person表,触发外键约束校验失败,抛出完整性错误。

修复方案

按需选择以下任意一种方案即可:

  • 方案1:简化Recipe定义,通过双下划线关联语法指定关联字段属性,让Model Bakery自动创建并保存关联的User实例
    修改baker_recipes.py代码如下:
from model_bakery.recipe import Recipe
from .models import Person

person = Recipe(Person, user__username="test_user")

这种写法下,Model Bakery在生成Person实例时,会自动创建一个用户名为test_user的User实例、写入数据库后再关联到Person上,自动处理外键依赖。

  • 方案2:单独定义User的Recipe,再关联到Person的Recipe中,适合需要复用User配置的场景
    修改baker_recipes.py代码如下:
from model_bakery.recipe import Recipe
from django.contrib.auth import get_user_model
from .models import Person

User = get_user_model()
test_user = Recipe(User, username="test_user")
person = Recipe(Person, user=test_user)

Recipe是延迟执行的对象,只有调用make_recipe时才会实际创建并保存关联的User实例,不会出现提前生成无效内存实例的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 03:57:02