我正在使用django表单向db添加新对象。我目前的代码是:
if request.method == 'POST':
form = MyForm(data=request.POST)
if form.is_valid():
obj = form.save()
else:
form = MyForm()
return render_to_response('reflections/add_reflection.html', {'form':form},context_instance=RequestContext(request))
上面的代码目前每次提交表单时都会添加一个新对象。我想要发生的是下次按下保存按钮时编辑对象而不是添加新记录。
我该怎么做?
答案 0 :(得分:5)
使用
instance_id = None
if request.method == 'POST':
try:
instance = MyType.objects.get(id=request.POST.get('instance_id'))
except MyType.DoesNotExist:
instance = None
form = MyForm(data=request.POST, instance=instance)
if form.is_valid():
obj = form.save()
instance_id = obj.id
else:
form = MyForm(instance=None)
return render_to_response('reflections/add_reflection.html', {'form':form, 'instance_id': instance_id or ''},context_instance=RequestContext(request))
保存对象后,将其在上下文中的id传递给页面 并将其添加到表单内的隐藏输入字段name ='instance_id'。
快乐编码。
答案 1 :(得分:0)
您需要添加单独的视图以编辑现有对象,或者 - 更好 - 将功能添加到此视图。要执行后者,您可以使用modelform将要编辑的对象的实例传递给子句的其他部分:
else:
if existing_obj:
form = MyForm(instance=existing_obj) #this is editing your 'existing_obj'
else:
form = MyForm() # this is creating a brand new, empty form
您还需要更新代码的POST处理位。请参阅示例here