Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django ModelForm为什么要更改它';调用save()之前的内部实例对象。。有时?_Python_Django - Fatal编程技术网

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
方法将这些更改传输到数据库