django ModelForm save() 方法问题

3 投票
1 回答
1586 浏览
提问于 2025-04-16 10:17

我有一个模型表单:

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)

我创建了一个表单,它使用用户提供的数据,并且把它和通过主键(从网址中获取)找到的实例绑定在一起。根据django文档,当我调用save()时,应该用POST的数据更新现有的实例。但是,我看到的是一个新对象被创建并保存到数据库中。这是怎么回事呢?非常感谢。

[编辑] 这真让我尴尬。代码本身确实没有问题。唯一搞砸这一切的是我在模板中设置的动作(因为我使用同一个模板来添加和编辑一个片段)……非常感谢你的帮助,真的很感激。

1 个回答

1

我不明白为什么会出现这个问题。你用的是什么版本的django?

无论如何,你可以手动强制更新,传入相应的参数。

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

撰写回答