在我的自定义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 shell 中做了一些简单的测试来仔细检查这种行为。实际上我得到了一些非常尴尬的结果。看一下这个:
>>> 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 时)......有时呢?