我有一个估计,其中包含有关潜在客户的详细信息。名字,地址等东西。简单的东西。然后,我有一些inlineformset
与主要估算相关的产品、劳动力等。
我遇到的问题有点像 22。我的想法是我会以这种方式进行验证:
- 跑
mainForm.is_valid()
- 如果主表单验证,则将其保存并移至“子”表单(
inlineformset
s) - 跑
my_inlineformset.is_valid()
- 如果
my_inlineformset
验证通过,则也将其保存 - 并mainForm
通过mainForm
ID 将其“附加”到 。
这里有一个问题:如果主表单没有验证,那么它就不会保存。如果它不保存,我没有什么可以“附加”inlineformset
到的。因此,当mainForm
不验证并且我被踢回表单以修复错误时,inlineformset
将是空白的。因此,如果用户在表单上填写了一堆东西,inlineformset
但是mainForm
当他们被踢回表单以修复他们的错误时,他们的所有数据inlineformset
都消失了。
我试图通过首先保存inlineformset
并仅在主表单验证后将其附加到主表单来规避此问题。这样做的问题是,我可以白白保存一堆 s——inlineformset
它们永远不会附加到估计值上。我不想要一整套没有附加到任何东西的记录,基本上,它们只会在数据库中不必要地漂浮。
这是我的视图代码:
if main.is_valid():
tmp = main.save(commit=False)
if estID != 'new':
tmp.routeNum = est.routeNum
tmp.estMap = est.estMap
tmp.estSketch = est.estSketch
if estID == 'new':
tmp.proposalID = newEstID('R')
tmp.sysType = 'R'
if estID == 'new':
pform = pFormSet(request.POST, instance=tmp, prefix="product_form")
lform = lFormSet(request.POST, instance=tmp, prefix="labour_form")
oform = oFormSet(request.POST, instance=tmp, prefix="other_form")
else:
pform = pFormSet(request.POST, instance=est, prefix="product_form")
lform = lFormSet(request.POST, instance=est, prefix="labour_form")
oform = oFormSet(request.POST, instance=est, prefix="other_form")
if pform.is_valid():
pform.save()
所以你可以看到,如果 main 没有验证,那么我FormSet
的 s 将永远不会被检查验证(然后它会抛出一个pform
在启动之前调用的错误)。但是,如果我pform
在 main 之前验证,那么我如何“附加”pform
到main
ifmain
本身不验证(因此不保存)?
那么,如果同一页面上的另一个表单没有验证,如何保持内联表单集数据呢?
编辑
我想知道是否将这个页面(有 4 个表单——一个主表单和 3 个内联表单)拆分为 4 个步骤。用户必须分别填写每个表格。这样我就可以安全地验证,而不必担心我上面提到的问题。当然,这似乎让用户做的工作比必要的多。