无法在绑定表单上初始化 ModelForm 字段?

mzu*_*mzu 3 django django-forms

当我尝试创建一个 ModelForm 时

MyModelForm(instance=a_model_instance_)
Run Code Online (Sandbox Code Playgroud)

似乎 Django 阻止了表单__init__方法中初始模型字段的任何设置,例如:

def __init__(self, *args, **kwargs):
    super(MyModelForm, self).__init__(*args, **kwargs)

    if self.instance.pk:
        if self.instance.my_field:
            my_field = self.instance.my_field
        else:
            # show parent's field instead
            my_field = self.instance.parent.my_field

        self.fields['my_field'].initial = my_field
Run Code Online (Sandbox Code Playgroud)

__init__一旦表单绑定到实例,是否有任何理由为什么在表单的方法中初始化字段不再起作用?

Aam*_*nan 5

我认为您想从其他模型字段值设置字段的初始值,如果它是 None:

def __init__(self, *args, **kwargs):
    super(MyModelForm, self).__init__(*args, **kwargs)

    if self.instance.pk:
        if not self.initial.get('my_field'):
            self.initial['my_field'] = self.instance.parent.my_field
Run Code Online (Sandbox Code Playgroud)