假设此视图用于编辑记录:
def edit_post(request, slug):
post = get_object_or_404(Post, slug=slug)
if request.method == "POST":
form = AddPostForm(request.POST, request.FILES, instance=post)
# 1
if form.is_valid():
# 2
new_post = form.save(commit=False)
new_post.save()
return redirect('administrator:view_admin_post')
...
现在假设这些:
我有field1
模型中存在的POST
。
field1
具有默认值,并假定
field1
取决于先前的情况。
field1
传递给用户。作为一个
结果,我将不会在request.POST
中使用它。在这种情况下,当我在print(post.field1)
行中写# 1
时,我具有先前的值,但是当我在其中打印时
第# 2
行,我得到了None
!
这是怎么回事?我该如何使用post.field1
?
注意:我知道我可以定义一个中间件变量并将以前的值保存在该变量中。但是有更好的方法吗?
答案 0 :(得分:1)
第一点:.is_valid()
不会影响您的数据库(除非您自定义表单的验证,但是,那么,您将知道为什么使用xD)。是对Model.save()
的调用(直接或通过form.save()
)覆盖了先前的值。
第二点:如果将模型实例传递给表单(这是您要做的),则可以通过模板中的{{ form.instance.your_field_name }}
访问它(及其字段)。
最后,您可以从ModelForm中完全排除模型字段,也可以将其标记为只读。
所有这些都已被FWIW充分记录,因此,我建议您花一些时间阅读文档,然后再使用离奇而又令人费解的“解决方案”(提示:您绝对不需要中间件来获得原始价值) ,它仍然在您的数据库中-直到您覆盖它为止。