Python Django ModelForm为什么要更改它';调用save()之前的内部实例对象。。有时?
在我的自定义Python Django ModelForm为什么要更改它';调用save()之前的内部实例对象。。有时?,python,django,Python,Django,在我的自定义UpdateView中,我想将表单的字段内容与该表单应该更改的对象字段进行比较(它作为实例参数提供给表单构造函数,并且还保存为self.object)。我在form\u valid()方法中尝试了这个: if self.object.content != form.save(commit=False).content ... 还有这个 if self.object.content != form.cleaned_data['content'] .... 在这两种情况下
UpdateView
中,我想将表单的字段内容与该表单应该更改的对象字段进行比较(它作为实例
参数提供给表单构造函数,并且还保存为self.object
)。我在form\u valid()方法中尝试了这个:
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>
>类文章形式(forms.ModelForm):
... 类元:
... 模型=文章
... 字段=('title',)
>>>a=Article.objects.all()[0]
>>>a
>>>form=ArticleForm(数据={'title':'pythonpower'},实例=a)
>>>a
>>>a=Article.objects.all()[0]
>>>a
>>>form=ArticleForm(数据={'title':'pythonpower'},实例=a)
>>>a
这一切正常吗?如果实例对象被更改了,为什么我需要save方法(尤其是commit=True的时候)。。。嗯,有时?如django文档中所述
如果使用commit=False调用save(),则它将返回一个尚未保存到数据库的对象。在本例中,由您对生成的模型实例调用save()。如果要在保存对象之前对其进行自定义处理,或者要使用某个专用模型保存选项,则此选项非常有用。默认情况下,commit为True
该实例仅被更新,但尚未保存到数据库中。您需要调用save
方法将这些更改传输到数据库