-1

假设此视图用于编辑记录:

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')
    ...

现在假设这些:

  1. 我有field1那个存在于POST模型中。

  2. field1具有默认值并假设 的当前值 field1取决于先前的值。

  3. 还假设我不想传递field1给用户。结果,我不会在request.POST.

print(post.field1)在这种情况下,当我在行中写入时,# 1我有以前的值,但是当我在行中打印时,# 2我得到了None

这是怎么回事?我怎么能有我的post.field1

注意:我知道我可以定义一个中间件变量并将之前的值保存在这个变量中。但是有没有更好的方法来做到这一点?

4

1 回答 1

1

第一点:.is_valid()不会触及您的数据库(除非您自定义表单的验证,但是,好吧,您会知道为什么 xD)。这是覆盖先前值的Model.save()(直接或通过)调用。form.save()

第二点:如果您将模型实例传递给您的表单(这就是您所做的),您可以通过{{ form.instance.your_field_name }}模板访问它(及其字段)。

最后,您可以从 ModelForm 中完全排除模型字段,或者将其标记为只读。

所有这一切都是相当有据可查的 FWIW,所以我建议您花一些时间阅读文档,然后再进一步使用奇异而复杂的“解决方案”(提示:您绝对不需要中间件来获得原始值,它仍然是在您的数据库中 - 直到您覆盖它,也就是说)。

于 2019-06-05T06:42:34.683 回答