覆盖继承的模型字段的默认值

时间:2012-05-23 08:47:23

标签: django django-models

我的模型结构如下:

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()

我想在创建HardwareStore()对象时默认将retailer_type设置为H.是否可以在HardwareStore类中的此字段上设置默认值?

3 个答案:

答案 0 :(得分:1)

Here's your answer,如果您尝试覆盖的字段是“字段”类型,则django默认情况下不允许这样做。我认为如果retailer_type是一个基类型(比如一个字符串),你可以轻松地做到这一点,因为python允许这样做。另一方面,Django对于自己的数据类型没有。

答案 1 :(得分: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')来检查商店的类型。

答案 2 :(得分:0)

我认为优雅的解决方案可能是在post_init信号中编写代码或覆盖init方法来设置默认值。可以检查过程是新模型还是现有模型(检查实例pk),并在正确的情况下将属性设置为默认值。

如果您需要更多详细信息,请与我们联系。