2013-02-18 19 views
0

我爲數據庫設置django模型,目前我的方法是直接將數據庫表映射到模型。但是,在某些情況下,我實際上需要以相對複雜的觀點工作。具體的情況是,我有一個表(在報告中,而不是數據庫),這需要證明從相關數據庫中的表合併列表:django中的模型和數據庫視圖

class Entity(Models): 
    name = CharField() 

class LargeEntity(Entity): 
    size = FloatField() 

class SmallEntity(Entity): 
    type = ForeignKey(SmallEntityType) 

的報告(和形式)需要顯示:

Entity name - entity.name 
Large/Small - 'Large' if entity is LargeEntity else 'Small' 
size/type - entity.size if entity is LargeEntity else 'type' 

這可以通過SQL中的CASE語句完成,但由於這在我的數據中發生了很多,我寧願找到一個更好的解決方案。

更改報告格式不在選項中,但如果有更好的實現方法,可以更改數據庫。

回答

0

在情況下,如果每個實體類型不包含大量的屬性,你可以創建在該模型中的所有必填字段,一個或多個字段一個模型的類型或別的東西來區分彼此實體:

class Entity(Models): 
    NORMAL, LARGE, SMALL = 0, 1, 2 
    ETYPE = (
     (NORMAL, 'Normal'), 
     (LARGE, 'Large'), 
     (SMALL, 'Small'), 
    ) 
    entity_type = IntegerField(choices=ETYPE,...) 

    name = CharField() 
    size = FloatField() 
    smalltype = ForeignKey(SmallEntityType) 
    ...