新聞中心
當你運行遷移時,Django 正在使用存儲在遷移文件中的模型的歷史版本。如果你使用 RunPython 操作編寫 Python 代碼,或者你的數(shù)據(jù)庫路由上有 ?allow_migrate?方法,則你 需要使用 這些模型的歷史版本而不是直接導入它們。

創(chuàng)新互聯(lián)建站是一家集網(wǎng)站建設,通山企業(yè)網(wǎng)站建設,通山品牌網(wǎng)站建設,網(wǎng)站定制,通山網(wǎng)站建設報價,網(wǎng)絡營銷,網(wǎng)絡優(yōu)化,通山網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學習、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。
如果你直接導入模型而不是使用歷史模型,則遷移 最初可能會工作 但將來在嘗試重新運行舊遷移時會失敗(通常,當你設置新安裝并運行所有遷移時 以建立數(shù)據(jù)庫時)。
這意味著歷史模型的問題可能不會立即顯現(xiàn)。如果遇到這種故障,可以編輯遷移以使用歷史模型,而不是直接導入并提交這些更改。
因為不可能序列化任意的 Python 代碼,這些歷史模型不會有你定義的任何自定義方法。然而,它們將具有相同的字段、關系、管理器(僅限于那些具有 ?use_in_migrations = True?)和 ?Meta?選項(也有版本控制,因此它們可能與當前的不同)。
這意味著在遷移中訪問對象時,將不會對對象調(diào)用自定義的 ?save()? 方法,也不會有任何自定義構(gòu)造函數(shù)或?qū)嵗椒ā_m當?shù)挠媱澮幌掳桑?/p>
字段選項中對函數(shù)的引用,例如 ?upload_to?和 ?limit_choices_to?以及具有 ?use_in_migrations = True?的模型管理器聲明,都會在遷移中序列化,因此只要有遷移引用它們,這些函數(shù)和類就需要保留。任何 自定義模型字段 也需要保留,因為這些都是直接由遷移導入的。
此外,模型的具體基類是以指針的形式存儲的,所以只要有一個包含對它們的引用的遷移,你就必須始終將基類保留在身邊。從好的方面來說,這些基類的方法和管理器都是正常繼承的,所以如果你一定需要訪問這些,你可以選擇將它們移到一個父類中。
要刪除舊的引用,你可以 壓縮遷移 或者,如果引用不多,把它們復制到遷移文件中。
文章名稱:創(chuàng)新互聯(lián)Django4.0教程:Django4.0 遷移-歷史模型
文章出自:http://www.5511xx.com/article/dhcoeho.html


咨詢
建站咨詢
