我的模型看起来像:
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?
答案 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>
希望有所帮助。