2012-05-23 100 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')来检查商店的类型。