我在视图中有以下代码
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']
当两个打印语句执行时,我得到以下
代码行print pagecontents[0].description
<p>Most important page</p>
代码行form.cleaned_data['description']
<p>Least important page</p>
为什么对象没有被保存?
答案 0 :(得分:10)
您没有保留更改的对象。
pagecontents[0].description = form.cleaned_data['description']
这会从pagecontents[0]
创建一个对象,更改description
,然后丢失对象的跟踪,这会在某个时刻收集垃圾。
pagecontents[0].save()
这使得另一个对象来自pagecontents[0]
并保存它,因为它没有改变,所以什么都不做。
pagecontents
是一个查询集,因此在实际运行查询之前不会创建任何对象,在这种情况下,当您对其应用[0]
时。
您需要跟踪对象:
pagecontent = PageContent.objects.filter(page=page)[0]
pagecontent.description = form.cleaned_data['description']
pagecontent.save()