django:验证修改表单

时间:2012-12-08 19:47:09

标签: django forms validation

我正在尝试验证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我不想添加数据但更新数据? (只有在添加数据时才会发生这些单一性错误)

2 个答案:

答案 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