我的模型结构如下:
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类中的此字段上设置默认值?
答案 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),并在正确的情况下将属性设置为默认值。
如果您需要更多详细信息,请与我们联系。