2012-05-23 252 views
1

我有沿着線的模型結構:覆蓋默認值字段

class Store(models.Model): 
    STORE_TYPE = (
     ('I', 'Ice Cream'), 
     ('H', 'Hardware'), 
    ) 
    retailer_type = models.CharField(max_length=10, choices=STORE_TYPE) 
    ... 

class HardwareStore(Store): 
     hammers_stocked = models.BooleanField() 

我想通過默認當我創建一個五金店()對象來設置retailer_type至H。是否可以在HardwareStore類的此字段中設置默認值?

+0

HardwareStore繼承自'Retailer'或'Store'? – danihp

+0

對不起 - 它從Store繼承。編輯修復 – alan

回答

0

我認爲一個優雅的解決方案可能是在post_init信號編寫代碼或覆蓋init方法來設置默認值。程序可能會檢查它是新模型還是現有模型(檢查實例pk),並在正確的情況下將您的屬性設置爲默認值。

讓我知道你是否需要更多的細節。

1

Here's your answer,django不允許默認情況下,如果您試圖覆蓋的字段是「字段」類型。我認爲,如果retailer_type是一個基本類型(比如說一個字符串),你可以很容易地做到這一點,因爲python允許這樣做。另一方面,Django對於它自己的數據類型沒有。

0

不知道這是否正常工作,嘗試

class Store(models.Model): 
    STORE_TYPE = (
     ('I', 'Ice Cream'), 
     ('H', 'Hardware'), 
    ) 
    STORE_TYPE_DEFAULT = lambda: None 

    retailer_type = models.CharField(max_length=10, choices=STORE_TYPE, default=STORE_TYPE_DEFAULT) 
    ... 

class HardwareStore(Store): 
    STORE_TYPE_DEFAULT = lambda: 'H' 

    hammers_stocked = models.BooleanField() 

但是,爲什麼你需要STORE_TYPE呢?您可以使用isinstance(obj, HardwareStore)hasttr(obj, 'hammers_stocked')來檢查商店的類型。