我正在尝试验证django中的更新表单。这是我的代码:
if request.method == 'POST':
form = LawsIdsForm(request.POST)
lawToValidate= form.data['lawsToValidate']
#if a law is selected
if lawToValidate!="":
law=LawsIdsModel.objects.get(id=lawToValidate)
formInstance = LawsIdsForm(instance=law, initial={'lawsToValidate':lawToValidate})
#saves the law
if 'lawsValidationSaveButton' in request.POST:
print "save"
if form.is_valid():
print "form valid"
formInstance.save()
else:
print "form not valid", form.errors
现在我要保存数据。如果我使用formInstance.is_valid(),它不起作用,因为表单是未绑定的。如果我执行form.is_valid(),则由于unicity错误而返回false。如何告诉django我不想添加数据但更新数据? (只有在添加数据时才会发生这些单一性错误)
答案 0 :(得分:0)
您应该验证并保存相同的表单:
if formInstance.is_valid(): <-- change here!
print "form valid"
formInstance.save()
在您的案例formInstance
表单中,因为谁拥有绑定的实例。
引用django Working with forms docs
处理表单中的数据:一旦is_valid()返回True,则 成功验证的表单数据将在form.cleaned_data中 字典。这些数据将很好地转换为Python 你的类型。
答案 1 :(得分:0)
解决!!
以下是我改变的内容:
if request.method == 'POST':
lawToValidate=request.POST.getlist('lawsToValidate')[0]
#if a law is selected
if lawToValidate!="":
law=LawsIdsModel.objects.get(id=lawToValidate)
#saves the law
if 'lawsValidationSaveButton' in request.POST:
print "save"
form = LawsIdsForm(request.POST, instance=law)
if form.is_valid():
print "form valid"
form.save()
else:
print "form not valid", form.errors