W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
當(dāng)你運(yùn)行遷移時(shí),Django 正在使用存儲(chǔ)在遷移文件中的模型的歷史版本。如果你使用 RunPython 操作編寫(xiě) Python 代碼,或者你的數(shù)據(jù)庫(kù)路由上有 ?allow_migrate
?方法,則你 需要使用 這些模型的歷史版本而不是直接導(dǎo)入它們。
如果你直接導(dǎo)入模型而不是使用歷史模型,則遷移 最初可能會(huì)工作 但將來(lái)在嘗試重新運(yùn)行舊遷移時(shí)會(huì)失?。ㄍǔ?,當(dāng)你設(shè)置新安裝并運(yùn)行所有遷移時(shí) 以建立數(shù)據(jù)庫(kù)時(shí))。
這意味著歷史模型的問(wèn)題可能不會(huì)立即顯現(xiàn)。如果遇到這種故障,可以編輯遷移以使用歷史模型,而不是直接導(dǎo)入并提交這些更改。
因?yàn)椴豢赡苄蛄谢我獾?Python 代碼,這些歷史模型不會(huì)有你定義的任何自定義方法。然而,它們將具有相同的字段、關(guān)系、管理器(僅限于那些具有 ?use_in_migrations = True
?)和 ?Meta
?選項(xiàng)(也有版本控制,因此它們可能與當(dāng)前的不同)。
這意味著在遷移中訪問(wèn)對(duì)象時(shí),將不會(huì)對(duì)對(duì)象調(diào)用自定義的 ?save()
? 方法,也不會(huì)有任何自定義構(gòu)造函數(shù)或?qū)嵗椒ā_m當(dāng)?shù)挠?jì)劃一下吧!
字段選項(xiàng)中對(duì)函數(shù)的引用,例如 ?upload_to
?和 ?limit_choices_to
?以及具有 ?use_in_migrations = True
?的模型管理器聲明,都會(huì)在遷移中序列化,因此只要有遷移引用它們,這些函數(shù)和類就需要保留。任何 自定義模型字段 也需要保留,因?yàn)檫@些都是直接由遷移導(dǎo)入的。
此外,模型的具體基類是以指針的形式存儲(chǔ)的,所以只要有一個(gè)包含對(duì)它們的引用的遷移,你就必須始終將基類保留在身邊。從好的方面來(lái)說(shuō),這些基類的方法和管理器都是正常繼承的,所以如果你一定需要訪問(wèn)這些,你可以選擇將它們移到一個(gè)父類中。
要?jiǎng)h除舊的引用,你可以 壓縮遷移 或者,如果引用不多,把它們復(fù)制到遷移文件中。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: