Django之面向對象ORM

Django模型層ORM的一個強大之處是對於模型的支持,該技術將python面向對象的編程方法與數據庫面向關係表的數據結構有機地結合。Django支持三種風格的模型繼承。

抽象類繼承:父類繼承自model.Model,但不會在底層數據庫生成相應的數據表。父類屬性列存儲在其子類的數據表中。

抽象類繼承的作用是在多個表有若干相同的字段時,可以使開發者將這些字段統一定義在抽象基類中,免於重複定義這些字段。抽象基類的定義通過在模型的Meta中定義屬性abstract=True來實現。

多表繼承:多表繼承的每個模型類型都在底層數據庫生成相應的數據表管理數據。

多表繼承技術中,無論是父表還是子表都會用數據庫中相對應的數據表維護模型數據,父類中的字段不會重複地在多個子類的相關數據表中進行定義。從某種意義上講,多表繼承纔是真正面向對象的ORM技術。多表繼承不需要多餘的關鍵字。在Django內部通過在父模型和子模型之間建立一對一關係來實現多表繼承技術。

注:在多表繼承時,崽子類實例中通過小寫的父類名字可以引用父類的實例。

代理模型繼承:父類用於在底層數據庫中管理數據表;而子類不定義數據列,只定義查詢數據集的排序方式等元數據。

在前兩種繼承模型中子類模型都有實際存儲數據的作用;而代理模型繼承中子類之用於管理父類的數據,而不實際存儲數據。代理模型繼承通過在子類的Meta中定義proxy=True屬性來實現。例如在子類模型中ordering = ["-父類模型字段名"]管理倒序的父類數據。使用代理模型繼承的原因是子類中新的特性不會影響父類模型及其已有代碼的行爲。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章