为什么我们在Django表单中将instance用作现有db条目的第二个参数而不是第一个参数
我看到实例需要作为模型表单中的第二个参数传递,以编辑DB的现有条目。。但是为什么我们不把它作为第一个arg传递呢为什么我们在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
>>> 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()
你能帮我理解这个吗
TIAModelForm继承自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)