你如何在Django模型子类中更改字段参数?

Zxa*_*aos 15 inheritance django-models default-value

假设我有一些抽象基类的Django模型:

class Foo(models.Model):
    value=models.IntegerField()

    class Meta:
        abstract = True
Run Code Online (Sandbox Code Playgroud)

它有两个派生类,我希望每个子类的字段默认值不同.我不能简单地覆盖该字段

class Bar(Foo):
    value=models.IntegerField(default=9)
Run Code Online (Sandbox Code Playgroud)

因为Django不会让你覆盖子类中的字段.我看过有关尝试更改可用选项的帖子,但在这种情况下,我主要关心的是更改默认值.有什么建议?

Tol*_*lli 8

另一个答案中建议的重新定义save方法的问题是,在保存模型对象之前,不会设置您的值.另一个没有这个问题的选项是重新定义__init__子类(Bar类):

def __init__(self, *args, **kwargs):
    if 'value' not in kwargs:
        kwargs['value'] = 9
    super(Bar, self).__init__(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)