簡體   English   中英

在Django中,我可以設置Model類的后代使用不同的默認值嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM