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

当我创建 HardwareStore() 对象时,我想将 Retailer_type 默认设置为 H。是否可以在 HardwareStore 类中为此字段设置默认值?

4

3 回答 3

1

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

于 2012-05-23T09:26:58.107 回答
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')来检查商店的类型。

于 2012-05-23T09:40:16.853 回答
0

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

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

于 2012-05-23T10:00:41.250 回答