2016-06-21 79 views
0

我最近開始研究一個長期運行的MySQL支持的Django網站。代碼大部分都是乾淨的,寫得很好,除了數據庫中的一個補丁似乎已經倉促應用。Django ORM中的別名

具體而言,其中一個型號被命名爲tbl_Badge_data。根據適用於網站其他部分的命名慣例,此型號應命名爲Badge

不幸的是,已經有太多的內建錯誤名稱,並且改變現有腳本(這些腳本包括Django queryset操作以及SQL語句)是不可行的。替換所有錯誤名稱的實例是不可能的,因爲並非所有的代碼都屬於我們;還有其他用戶依賴這些數據。

是否有任何方法可以將Badge別名爲tbl_Badge_data以便所有將來的開發都使用正確的名稱?如果是的話,這將如何影響基礎表的名稱?如果不是,那麼在不引入性能影響的情況下處理類似事情的最佳方式是什麼(例如,「代理表」或「代理模型」是一對一映射)?正如你所想象的,我的團隊不想在這個非問題上投入時間(也許有理由)要我忽略這個問題。

+1

爲什麼不在你的models.py中添加'Badge = tbl_Badge_data''(在你定義了''tbl_Badge_data''類之後),然後每當你做一個''from foo.models import Badge''想用它嗎? – Serafeim

回答

2

代理模式是而不是一對一映射;它在數據庫中沒有任何表示,並且完全符合你的要求。

即使更簡單,但只是在你的模型中定義一個別名;在tbl_Badge_data的定義之後,你可以這樣做:

Badge = tbl_Badge_data 

並導入任何你需要它的徽章。

+0

沒意識到這很簡單。謝謝@DanielRoseman – Jedi