基类看起来像这样(代码来自 Django,但问题不是 Django 特定的):
class BaseModelForm(BaseForm):
def __init__(self, data=None, files=None, auto_id='id_%s', prefix=None,
initial=None, error_class=ErrorList, label_suffix=':',
empty_permitted=False, instance=None):
class ModelForm(BaseModelForm):
__metaclass__ = ModelFormMetaclass
派生类如下所示:
class MyForm(forms.ModelForm):
def __init__(self, data=None, files=None, *args, **kwargs):
super(EdocForm, self).__init__(data, files, *args, **kwargs)
self.Meta.model.get_others(data, files, kwargs.get('instance', None))
如果编码人员将实例作为 kwargs 传递,这一切都很好,应该可以工作,但是如果他们不这样做,而是将其传递给 args 怎么办?处理 *args 和 **kwargs 时提取实例的明智方法是什么?诚然,在这种情况下,实例在 args 中的机会很小,但如果它是第三个参数而不是第五个(不包括自我)。