我在我的應用程序中有一定的類結構,目前利用django進行演示。我根本沒有使用模型層, - 數據庫交互例程是手寫的。將複雜的python對象映射到Django模型
但是,我正在考慮實際使用django以充分發揮其潛力並實際使用數據庫抽象層的可能性。問題是如何最好地將我現有的類結構與模型層結合起來。
一個例子類:這裏
class UpperClass(base):
def __init__(self, attr1, attr2):
self.attr1 = attr1
self.attr2 = attr2
# attr1 and attr2 are actually instances of, say,
# CustomType1 and CustomType2
母豬我怎麼去這個映射到一個Django模型:
class UpperClass(models.Model):
attr1 = CustomType1Field(...)
attr2 = CustomType2Field(...)
夠簡單 - 所有的序列化和驗證的東西已經被寫入,所以想出CustomType1和CustomType2的自定義字段類並不難。
真正的問題是,我在哪裏放置實際UpperClass的自定義(非數據庫相關)行爲。根據我的理解,模型可以用於「將數據從數據庫中取出」,但是行爲在哪裏呢?我是否將非數據庫相關的方法嵌入到UpperClass的Model實例中?真的,我在這裏不知所措。希望這至少對你有部分意義。
突然間,這對我來說非常有意義。由於模型字段(models.Field的子類)映射回Python類型/類(通過to_python()),所以UpperClass的類實例如何初始化並不重要 - 無論是通過從我的代碼直接調用__init__ a = UpperClass(attr1 = foo,attr2 = bar))或通過ORM(a = Upperclass.objects.get(...))。不管怎樣,實例名稱空間都會被attr1和attr2填充爲正確的類型。我對你有正確的理解嗎? – shylent 2009-10-24 19:36:43
是的:UpperClass的實例是常規的Python對象,常規屬性attr1和attr2(從數據庫讀出)。 – 2009-10-24 19:45:33
非常感謝您的幫助。 – shylent 2009-10-24 19:48:01