【问题标题】:django: assigning foreign key before target model is saveddjango:在保存目标模型之前分配外键
【发布时间】:2012-11-06 10:24:46
【问题描述】:

假设AB 是django 模型,其中A 有一个外键字段到B

a = A()
b = B()
a.my_b = b
b.save()
a.save()

令人惊讶的是,anull 一起保存在 my_b 外键字段中。如果您在保存之前或之后检查a.my_b,它确实指的是b 实例,但是似乎django 在a.my_b = b 分配而不是a.save() 时评估外键ID 本身.在复杂的系统和流程中,可能很难更改命令的顺序,因此在将 b 分配给 a 之前简单地保存它可能是不切实际的...

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

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

是否有其他方法可以解决此问题?

【问题讨论】:

    标签: django foreign-keys


    【解决方案1】:

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

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

    【讨论】:

    • 当我尝试从嵌套的 JSON 数据动态创建模型实例时,这让我很不爽。在我的情况下,我无法在处理所有字段之前保存实例(这将导致创建相关实例),因此我无法在分配之前保存。相反,我构建了一个函数列表,以便在实例全部连接时调用。除了每个实例的保存方法之外,我还添加了一个partial(setattr, name, value),这样狡猾的分配就会排队等待相关实例被保存。遗憾的是,#8892 似乎永远不会被修复,但至少他们会添加一个错误。
    • @pluma 你能扩展你的解决方案吗?我正在处理同样的问题。
    猜你喜欢
    • 1970-01-01
    • 2019-06-20
    • 2014-02-14
    • 2012-08-04
    • 2013-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多