Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用内联表单集进行Django表单验证_Django_Validation_Django Forms_Inline Formset - Fatal编程技术网

使用内联表单集进行Django表单验证

使用内联表单集进行Django表单验证,django,validation,django-forms,inline-formset,Django,Validation,Django Forms,Inline Formset,我在一个HTML页面上有一个主表单和三个内联forset,用于为客户创建评估。“main”表单的主键用作所有三个内联表单集的外键。我可以创建新的估计,保存它们,更改数据等。没问题。但是,只有当所有必需的数据都存在并且“有效”时,它才起作用 我如何让HTML页面重新显示所有输入的数据,但在正确的位置显示错误 为了进一步解释我的情况,一个简单表单的常规方法是这样的(这是我脑子里想不出来的,希望我没有代码错误): 现在,使用上述方法,如果存在验证错误,则表单将重新显示用户已提交的数据,并在相应字段旁边

我在一个HTML页面上有一个主表单和三个内联forset,用于为客户创建评估。“main”表单的主键用作所有三个内联表单集的外键。我可以创建新的估计,保存它们,更改数据等。没问题。但是,只有当所有必需的数据都存在并且“有效”时,它才起作用

我如何让HTML页面重新显示所有输入的数据,但在正确的位置显示错误

为了进一步解释我的情况,一个简单表单的常规方法是这样的(这是我脑子里想不出来的,希望我没有代码错误):

现在,使用上述方法,如果存在验证错误,则表单将重新显示用户已提交的数据,并在相应字段旁边显示一些错误

对于内联表单集,我们可以这样做(假设
myForm
具有PK,并且
myInline
通过外键使用该PK):

因此,对于上面的代码,如果我在
myForm
中有验证错误,我们将退出
if
语句,并重新显示表单以显示错误。但是,内联表单尚未创建(内联表单集(request.POST,instance=tmp)line),因为该步骤是在检查
myForm
的有效性之后发生的,并且我们得到了错误
myInline在赋值之前被引用

为了解决这一问题,我尝试移动线路:

        tmp = myform.save(commit=False)
        myInline = inlineFormset(request.POST, instance=tmp)
在检查
myForm
是否有效之前,我可以捕获内联表单的POST数据。但是我不能这样做,因为我没有检查
myForm
是否有效

鸡和蛋。啊

那么,在重新显示用户为内联表单集输入的内容时,如何验证表单并显示表单的输入错误呢

很抱歉发了这么长的帖子,但我不知道如何缩短这个问题


编辑:
好的,我找到了如何显示
myForm
主表单的验证错误,并重新显示所有
myForm
字段以及
myInline
表单集字段。事情是这样的:

if request.method=='POST':
    myform = Model_Form(request.POST)
    if myform.is_valid():
        tmp = myform.save(commit=False)
        myInline = inlineFormset(request.POST, instance=tmp)
        if myInline.is_valid():
            myInline.save()
            myform.save()
            return HttpResponseRedirect(...)
    myInline = inlineFormset(request.POST)
else:
    myform = new form from model etc...
    myInline = new inline formset from model etc...
return render_to_respose(template.html, {'myform':myform, 'myInline':myInline}, context_instance=RequestContext(request))
if request.method=='POST':
    myform = Model_Form(request.POST)
    if myform.is_valid():
        tmp = myform.save(commit=False)
        myInline = inlineFormset(request.POST, instance=tmp)
        if myInline.is_valid():
            myInline.save()
            myform.save()
            return HttpResponseRedirect(...)
    myInline = inlineFormset(request.POST)
else:
    myform = new form from model etc...
    myInline = new inline formset from model etc...
return render_to_respose(template.html, {'myform':myform, 'myInline':myInline}, context_instance=RequestContext(request))
在退出主
if
语句之前,我只需偷偷加入一个新的
myInline
赋值

希望这能帮助其他人解决同样的问题


干杯

好的,我找到了如何显示
myForm
主表单的验证错误,并重新显示所有
myForm
字段以及
myInline
表单集字段。事情是这样的:

if request.method=='POST':
    myform = Model_Form(request.POST)
    if myform.is_valid():
        tmp = myform.save(commit=False)
        myInline = inlineFormset(request.POST, instance=tmp)
        if myInline.is_valid():
            myInline.save()
            myform.save()
            return HttpResponseRedirect(...)
    myInline = inlineFormset(request.POST)
else:
    myform = new form from model etc...
    myInline = new inline formset from model etc...
return render_to_respose(template.html, {'myform':myform, 'myInline':myInline}, context_instance=RequestContext(request))
if request.method=='POST':
    myform = Model_Form(request.POST)
    if myform.is_valid():
        tmp = myform.save(commit=False)
        myInline = inlineFormset(request.POST, instance=tmp)
        if myInline.is_valid():
            myInline.save()
            myform.save()
            return HttpResponseRedirect(...)
    myInline = inlineFormset(request.POST)
else:
    myform = new form from model etc...
    myInline = new inline formset from model etc...
return render_to_respose(template.html, {'myform':myform, 'myInline':myInline}, context_instance=RequestContext(request))
在退出主
if
语句之前,我只需偷偷加入一个新的
myInline
赋值

希望这能帮助其他人解决同样的问题


干杯

如果你自己找到了答案,你可以发布一个答案并接受它作为正确的答案(这样问题就结束了!)很好的回答。(我还是新来的)我的答案贴在下面。