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

Django 覆盖继承模型字段的默认值,django,django-models,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_st

我有一个模型结构,大致如下:

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类中设置此字段的默认值?

,如果要覆盖的字段是“字段”类型,django默认不允许这样做。我认为,如果retailer_type是一个基类型(比如一个字符串),您可以很容易地做到这一点,因为python允许这样做。另一方面,对于Django自己的数据类型,它不允许这样做。

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

不确定这是否有效,试试看

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\u TYPE
?您可以使用
isinstance(obj,HardwareStore)
hasttr(obj,'hammers\u stocked')
检查商店的类型。

如果不确定是否有效,请尝试

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\u TYPE
?您可以使用
isinstance(obj,HardwareStore)
hasttr(obj,'hammers\u stocked')
来检查存储的类型。

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


如果您需要更多详细信息,请告诉我。

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


如果您需要更多详细信息,请告诉我。

硬件存储继承自
零售商
商店
?抱歉-它继承自商店。编辑为修复硬件存储继承自
零售商
商店
?抱歉-它继承自商店。编辑以修复