django ModelForm save()方法问题

时间:2011-01-20 06:03:20

标签: python django save modelform

我有一个模型表格:

class SnippetForm(ModelForm):
    class Meta:
        model = Snippet
        exclude = ['author', 'slug']

我希望能够使用以下命令编辑特定实例:

def edit_snippet(request, snippet_id):
    #look up for that snippet
    snippet = get_object_or_404(Snippet, pk=snippet_id)
    if request.user.id != snippet.author.id:
        return HttpResponseForbidden()
    if request.method == 'POST':
        form = SnippetForm(data=request.POST, instance=snippet)
        if form.is_valid():
            form.save()
            return HttpResponseRedirect(snippet.get_absolute_url())
    else:
        form = SnippetForm(instance=snippet)
    return render_to_response(SNIPPET_EDIT_TEMPLATE,
                              {'form':form, 'add':False, 'user':request.user}, 
                              RequestContext(request))

请注意,在

form = SnippetForm(data=request.POST, instance=snippet)

,我创建了一个表单,该表单使用用户提供的数据,并将其与使用主键(从url接收)找到的实例绑定。根据{{​​3}},当我调用save()时,应使用POSTED数据更新现有实例。相反,我看到的是创建一个新对象并将其保存到数据库中。什么地方出了错?非常感谢。

[编辑]这真的很尴尬。代码确实没有错。唯一弄乱了整个事情的是我在模板中添加的动作(因为我使用相同的模板添加和编辑代码段)....非常感谢你的帮助,非常感谢。

1 个答案:

答案 0 :(得分:1)

我不明白为什么会这样。它是什么版本的django?

在任何情况下,您都可以手动强制更新传递相应的参数。

form = SnippetForm(data=request.POST, instance=snippet, force_update=True)