django:在保存目标模型之前分配外键
假设django:在保存目标模型之前分配外键,django,foreign-keys,Django,Foreign Keys,假设A和B是django型号,其中A有一个外键字段指向B: a = A() b = B() a.my_b = b b.save() a.save() 令人惊讶的是,a与null一起保存在my_b外键字段中。如果在保存之前或之后选中a.my_b,它确实引用了b实例,但是django似乎在a.my_b=b赋值时而不是在a.save()时评估外键id本身。在复杂的系统和流程中,可能很难更改命令的顺序,因此在将其分配给a之前简单地保存b可能是不切实际的 在save命令之间添加难以置信的语句a.my_b
A
和B
是django型号,其中A
有一个外键字段指向B
:
a = A()
b = B()
a.my_b = b
b.save()
a.save()
令人惊讶的是,a
与null
一起保存在my_b
外键字段中。如果在保存之前或之后选中a.my_b
,它确实引用了b
实例,但是django似乎在a.my_b=b
赋值时而不是在a.save()
时评估外键id本身。在复杂的系统和流程中,可能很难更改命令的顺序,因此在将其分配给a
之前简单地保存b
可能是不切实际的
在save命令之间添加难以置信的语句a.my_b=a.my_b
是可行的,但在我看来这是一个可怕的解决方法
有没有办法配置django在保存模型实例时重新评估外键?
是否有其他方法可以解决此问题?有一个Django票证描述了此问题
同时,没有改变行为的配置设置。您必须更改保存和分配操作的顺序,或者执行额外的分配。当我尝试从嵌套的JSON数据动态创建模型实例时,这一点让我有些困惑。在我的例子中,我无法在处理所有字段之前保存实例(这将导致创建相关实例),因此无法在分配之前保存。相反,我构建了一个函数列表,当所有实例都连接起来时,将调用这些函数。除了每个实例的save方法之外,我还添加了一个
partial(setattr,name,value)
,因此在保存相关实例之前,不可靠的分配都是排队的。遗憾的是#8892看起来不会被修复,但至少会增加一个错误。@pluma你能详细介绍一下你的解决方案吗?我正在处理同样的问题。