以默认形式覆盖django模型默认值?

时间:2017-08-02 18:40:53

标签: django forms override default

我的模型看起来像:

class DooDad(models.Model):
    doo_dad_dogue = models.BooleanField(default=True)

麻烦的是,默认需要被......与这个问题无关的东西操纵。如果我正在创建创建对象的表单,那么解决方案将是微不足道的。 我仍然使用django默认表单来创建这些东西,我宁愿保持这种方式。

我尝试了显而易见的事情:

class DooDad(models.Model):
    doo_dad_dogue = models.BooleanField(default=True)

    def __init__(self, *args, **kwargs):
        super(DooDad, self).__init__(*args, **kwargs)
        self.doo_dad_dogue = False

...我怀疑会产生可怕的副作用,但值得尝试。表格仍然会检查框。

编辑:我应该提到这是Django 1.9

如果无法继续使用默认的模型创建表单,我是否需要做一些不寻常的事情来制作仅影响CREATE而不影响编辑的ModelForm?

1 个答案:

答案 0 :(得分:0)

我不认为使用__init__in模型是一种很好的做法。但是,如果您想尝试重要的是知道您的代码不正确,则字段doo_dad_dogue是描述符。正确的访问方式是 使用self.fields['doo_dad_dogue'] = False

使用表单是正确的方法。您可以使用 init 方法覆盖表单中的默认值:

def __init__(self, *args, **kwargs):
    super(<YOUR_FORM>, self).__init__(*args, **kwargs)
    if args is not None and len(args) and args[0] is not None: 
        <MANIPULATE HERE>

希望有所帮助。