我有一个模型表格:
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 接收)找到的实例绑定。根据Django 文档 http://docs.djangoproject.com/en/dev/topics/forms/modelforms/#the-save-method,当我调用 save() 时,应使用 POSTED 数据更新现有实例。相反,我看到的是创建一个新对象并将其保存到数据库中。什么地方出了错?多谢。
【编辑】这实在是太尴尬了。代码确实没有任何问题。唯一搞乱整个事情的是我在模板中放入的操作(因为我使用相同的模板来添加和编辑片段)......非常感谢您的帮助,非常感谢。
我不明白为什么会发生这种情况。 django 是什么版本?
在任何情况下,您都可以手动强制更新并传递相应的参数。
form = SnippetForm(data=request.POST, instance=snippet, force_update=True)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)