12
之前假設A
和B
是Django模型,其中A
有一個外鍵字段B
:的Django:指定外鍵的目標模型保存
a = A()
b = B()
a.my_b = b
b.save()
a.save()
令人驚訝的a
在my_b
外鍵字段保存null
。如果在保存之前或之後檢查a.my_b
確實參考b
實例,但似乎django在a.my_b = b
賦值而不是a.save()
上評估外鍵id本身。在複雜的系統和流程可能很難改變指令的順序,因此只需將其分配給a
可能是不切實際的前節省b
...
添加不可思議聲明a.my_b=a.my_b
保存命令之間的作品,但在我看來,一個可怕的解決方法。
有沒有一種方法可以配置django在保存模型實例時重新評估外鍵?
有沒有不同的方法可以解決這個問題?
當我試圖從嵌套的JSON數據動態創建模型實例時,會發生這種情況。在我的情況下,我無法在處理所有字段之前保存實例(這會導致創建相關實例),所以我無法在分配前保存。相反,我構建了一個函數列表,當實例全部連線時,這些函數將被調用。除了每個實例的保存方法之外,我還添加了一個「partial(setattr,name,value)',這樣不良分配就排隊了,直到相關實例保存完畢。可悲的是,它看起來並不像#8892會被修復,但至少他們會添加一個錯誤。 –
@pluma可以擴展您的解決方案嗎?我正在處理同樣的問題。 – bryanph