0

我正在尝试在 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(),由于唯一性错误,它会返回 false。如何告诉 django 我不想添加数据而是更新数据?(这些唯一性错误只有在添加数据时才会发生)

4

2 回答 2

0

您应该验证并保存相同的表单:

        if formInstance.is_valid():     <-- change here!
            print "form valid"
            formInstance.save()

在您的案例formInstance中,因为是谁拥有绑定的实例。

引用django 使用表单文档

处理来自表单的数据:一旦 is_valid() 返回 True,成功验证的表单数据将在 form.cleaned_data 字典中。这些数据已经为您很好地转换为 Python 类型。

于 2012-12-08T19:57:47.933 回答
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
于 2013-09-19T18:08:01.327 回答