私の習慣UpdateView
では、フォームのフィールドコンテンツを、このフォームが変更することになっているオブジェクトのフィールドと比較したいと思います(instance
フォームコンストラクターへの引数として指定され、として保存されますself.object
)。私はこれを試しましたform_valid() method
:
if self.object.content != form.save(commit=False).content
...
この
if self.object.content != form.cleaned_data['content']
....
どちらの場合も、両方の値が等しいため、このテストは合格しません。うーん..それは面白くなり、この動作を再確認するためにdjangoシェルでいくつかの簡単なテストを行いました。実際、私はその時本当に厄介な結果を得ました。これをチェックしてください:
>>> class ArticleForm(forms.ModelForm):
... class Meta:
... model=Article
... fields = ('title',)
>>> a = Article.objects.all()[0]
>>> a
<Article: 12345>
>>> form = ArticleForm(data={'title': 'python-power'}, instance=a)
>>> a
<Article: python-power>
>>> a = Article.objects.all()[0]
>>> a
<Article: 12345>
>>> form = ArticleForm(data={'title': 'python-power'}, instance=a)
>>> a
<Article: 12345>
まったく正常ですか?とにかくインスタンスオブジェクトが変更された場合、なぜ(特にcommit = Trueで)saveメソッドが必要なのですか?