Django表单方法`is_valid()`的副作用:intance更新了吗?

时间:2017-06-28 06:47:09

标签: django django-forms

views.py中,我按如下方式更新article个实例:

def articleUpdate(request, articleId):

    ...

    articleToUpdate = get_object_or_404(Article, id=articleId)

    ...

    # POST
    articleForm = ArticleForm(request.POST, instance=articleToUpdate)

    print(articleToUpdate)

    if not articleForm.is_valid():
        return render(request, template, {...})

    print(articleToUpdate)

    articleForm.save()

    ...

对象articleToUpdate的第二次打印显示它已被更改。这是方法is_valid()的副作用吗?发生了什么事?

1 个答案:

答案 0 :(得分:2)

当您为模型表单调用form.is_valid()时,实例会更新。这就是行为since Django 1.2

如果要访问原始实例,请在视图中两次从数据库中获取对象。

# passed to form, will be updated in place
articleToUpdate = get_object_or_404(Article, id=articleId)
# not passed to form, will be unchanged
unchanged_article = get_object_or_404(Article, id=articleId)