![](/img/trans.png)
[英]Why can't I use model methods as defaults? What is self in Python/Django models anyway?
[英]In Django can I set descendants of a Model class to use different defaults?
在django(v1.9)中有沒有辦法設置一個在基類中定義的字段,以便在不同的后代類中使用不同的默認值?
class Base(models.Model):
OBJ_TYPES = (
('type_a', 'Type A'),
('type_b', 'Type B'),
('type_c', 'Type C'),
('type_d', 'Type D'),
)
obj_type = models.CharField(choices=OBJ_TYPES, default='type_a')
class GenericChild(Base):
# obj_type defaults to type_a
pass
class TypeDChild(Base)
# Want obj_type to default to type_d
# This causes error (local field clashes...)
obj_type = models.CharField(choices=OBJ_TYPES, default='type_d')
是的,它可以被覆蓋,但可能不是你想象的那樣。 您修改后的代碼將起作用:
class Base(models.Model):
OBJ_TYPES = (
('type_a', 'Type A'),
('type_b', 'Type B'),
('type_c', 'Type C'),
('type_d', 'Type D'),
)
obj_type = models.CharField(choices=OBJ_TYPES, default='type_a')
# Make sure you do this, always always always set your base classes to abstract
class Meta:
abstract = True
class GenericChild(Base):
# obj_type defaults to type_a
pass
class TypeDChild(Base)
# Want obj_type to default to type_d
# This causes error (local field clashes...)
# obj_type = models.CharField(choices=OBJ_TYPES, default='type_d')
pass
TypeDChild._meta.get_field('obj_type').default = 'type_d'
如您所見,您必須在類定義后更新默認值。 請記住,這可能適用於未來版本的Django,也可能不適用,因為它們更新了模型內省每個版本的工作方式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.