为什么我们在Django表单中将instance用作现有db条目的第二个参数而不是第一个参数

为什么我们在Django表单中将instance用作现有db条目的第二个参数而不是第一个参数,django,django-models,django-forms,Django,Django Models,Django Forms,我看到实例需要作为模型表单中的第二个参数传递,以编辑DB的现有条目。。但是为什么我们不把它作为第一个arg传递呢 >>> from myapp.models import Article >>> from myapp.forms import ArticleForm # Create a form instance from POST data. >>> f = ArticleForm(request.POST) # Save a new

我看到实例需要作为模型表单中的第二个参数传递,以编辑DB的现有条目。。但是为什么我们不把它作为第一个arg传递呢

>>> from myapp.models import Article
>>> from myapp.forms import ArticleForm

# Create a form instance from POST data.
>>> f = ArticleForm(request.POST)

# Save a new Article object from the form's data.
>>> new_article = f.save()

# Create a form to edit an existing Article, but use
# POST data to populate the form.
>>> a = Article.objects.get(pk=1)
>>> **f = ArticleForm(request.POST, instance=a)**
>>> f.save()
你能帮我理解这个吗


TIA

ModelForm继承自ModelBaseForm,ModelBaseForm再次继承自BaseForm,这会导致许多可能的参数

class BaseForm:
    def __init__(self, data=None, files=None, auto_id='id_%s', prefix=None,
                 initial=None, error_class=ErrorList, label_suffix=None,
                 empty_permitted=False, field_order=None, use_required_attribute=None, renderer=None):

class BaseModelForm(BaseForm):
    def __init__(self, data=None, files=None, auto_id='id_%s', prefix=None,
                 initial=None, error_class=ErrorList, label_suffix=None,
                 empty_permitted=False, instance=None, use_required_attribute=None,
                 renderer=None):

class ModelForm(BaseModelForm, metaclass=ModelFormMetaclass):
    pass
在您的示例中,instance是第二个参数,但它是一个关键字参数。这允许跳过其他几个参数,因为这些参数将接收其默认值。事实上,这个实例就是第九个参数

如果您喜欢在初始化表单时将instance作为第一个参数,这实际上是可能的,因为关键字arguments

class BaseForm:
    def __init__(self, data=None, files=None, auto_id='id_%s', prefix=None,
                 initial=None, error_class=ErrorList, label_suffix=None,
                 empty_permitted=False, field_order=None, use_required_attribute=None, renderer=None):

class BaseModelForm(BaseForm):
    def __init__(self, data=None, files=None, auto_id='id_%s', prefix=None,
                 initial=None, error_class=ErrorList, label_suffix=None,
                 empty_permitted=False, instance=None, use_required_attribute=None,
                 renderer=None):

class ModelForm(BaseModelForm, metaclass=ModelFormMetaclass):
    pass
这样做:

f = ArticleForm(instance=a, data=request.POST)