django:在保存目标模型之前分配外键

Jon*_*han 12 django foreign-keys

假设A并且B是django模型,其中A有一个外键字段B:

a = A()
b = B()
a.my_b = b
b.save()
a.save()
Run Code Online (Sandbox Code Playgroud)

令人惊讶的a是保存nullmy_b国外的重点领域.如果你a.my_b在保存之前或之后检查它确实引用了b实例,但似乎django在a.my_b = b赋值时评估外键id本身,而不是a.save().在复杂的系统和流程中,可能很难改变命令的顺序,因此b在分配命令之前简单地保存a可能是不切实际的......

a.my_b=a.my_b在save命令之间添加令人难以置信的语句有效,但在我看来是一个可怕的解决方法.

有没有办法配置django在保存模型实例时重新计算外键?

是否有可能解决此问题的不同方法?

Ala*_*air 7

有一个描述这个问题的Django票,#8892.

与此同时,没有更改行为的配置设置.您必须更改保存和分配操作的顺序,或执行额外的分配.

  • 当我尝试从嵌套的JSON数据动态创建模型实例时,这就是我的意思.在我的情况下,我无法在处理所有字段之前保存实例(这将导致创建相关实例),因此在分配之前我无法保存.相反,我构建了一个在实例全部连接时要调用的函数列表.除了每个实例的save方法之外,我还添加了一个`partial(setattr,name,value)`,这样狡猾的赋值就会排队,直到相关实例被保存为止.可悲的是,看起来#8892看起来不会被修复,但至少他们会添加一个错误. (2认同)