Django模型没有保存..在这里完全迷茫

aru*_*tgi 3 django django-models django-forms

我在视图中有以下代码

page = get_object_or_404(Page, site = site, slug = slug)
pagecontents = PageContent.objects.filter(page=page)
pagecontents[0].description = form.cleaned_data['description']
pagecontents[0].save()
print pagecontents[0].description
print form.cleaned_data['description']
Run Code Online (Sandbox Code Playgroud)

当两个打印语句执行时,我得到以下内容

为线 print pagecontents[0].description

<p>Most important page</p>
Run Code Online (Sandbox Code Playgroud)

为线 form.cleaned_data['description']

<p>Least important page</p>
Run Code Online (Sandbox Code Playgroud)

为什么对象没有被保存?

Mik*_*one 10

你没有保留改变的对象.

pagecontents[0].description = form.cleaned_data['description']
Run Code Online (Sandbox Code Playgroud)

这会使对象pagecontents[0]变为description,然后丢失对象的跟踪,这会在某个时刻收集垃圾.

pagecontents[0].save()
Run Code Online (Sandbox Code Playgroud)

这使得另一个对象从中pagecontents[0]保存并保存它,因为它没有改变.

pagecontents是一个查询集,所以它不会创建任何对象,直到它实际运行查询,在这种情况下,当你应用[0]它时.

您需要跟踪对象:

pagecontent = PageContent.objects.filter(page=page)[0]
pagecontent.description = form.cleaned_data['description']
pagecontent.save()
Run Code Online (Sandbox Code Playgroud)