在我的自定义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),如果实例对象仍然改变了......有时候好吗?
答案 0 :(得分:0)
如django文档here
中所述如果使用commit = False调用save(),则它将返回尚未保存到数据库的对象。在这种情况下,您可以在生成的模型实例上调用save()。如果要在保存对象之前对对象执行自定义处理,或者如果要使用其中一个专用模型保存选项,则此选项非常有用。默认情况下,commit为True
实例仅更新但尚未保存到数据库。您需要调用save
方法将这些更改传输到数据库。