在呈现之前以编辑模式将数据加载到 ModelForm 字段中

Load data into ModelForm fields in edit mode before it rendered

我在 ModelForm 中有一个模型中不存在的字段。该字段通过覆盖 ModelForm.save() 函数单独保存:

class MyForm(ModelForm):
    custom_field = CharField(label='Custom field', widget=TextInput())
    def save(self, commit=True):
        data = self.cleaned_data
        # save custom_field

现在如何在呈现之前将此自定义字段加载到 ModelForm(在编辑模式下)。我尝试设置字段字典,但字段字典在 ModelForm 中不存在:

def __init__(self, *args, **kwargs):
    super(MyForm, self).__init__(*args, **kwargs)
    self.fields['custom_field'] = self.instance._meta.model.custom_field

我收到以下错误:

type object 'MyForm' has no attribute 'fields'

要为字段提供初始数据,请使用 initial 参数:

form = MyForm(instance=my_obj, initial={'custom_field': 'Test'})

或者,如果您想在 __init__ 构造函数中执行此操作:

def __init__(self, *args, **kwargs):
    kwargs['initial'] = kwargs.get('initial', {})
    kwargs['initial']['custom_field'] = 'Test'
    super(MyForm, self).__init__(*args, **kwargs)