13

假设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分配时评估外键 id 本身,而不是在a.save(). 在复杂的系统和流程中,可能很难更改命令的顺序,因此b在分配之前简单地保存a可能是不切实际的......

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

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

是否有不同的方法可以解决这个问题?

4

1 回答 1

7

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

同时,没有配置设置可以改变行为。您必须更改保存和分配操作的顺序,或者进行额外的分配。

于 2012-11-06T10:47:03.643 回答