我有一个表单,模型和外键模式表示为内联表单集。 我有一个节省订购的formsets的helluva时间。事实上,每当我尝试删除一个时,它就会成倍增加。
form.py中的:
class PublicationForm(ModelForm):
class Meta:
model = Publication
fields = ['title']
SectionFormSet = inlineformset_factory(Publication, Section, can_delete=True, can_order=True, extra=2)
并在views.py中:
if publication_form.is_valid():
pub = publication_form.save(commit=False)
section_formset = SectionFormSet(request.POST, instance=pub, prefix='section')
if section_formset.is_valid():
pub.save()
for s in section_formset.ordered_forms:
s.instance.order = s.cleaned_data['ORDER']
s.save()
我对S.O.但一无所获。 有人有解决方案吗?
谢谢!
答案 0 :(得分:0)
是的,你所有的保存都混乱了。像这样:
1 - 您的formset包含SectionForm的集合,因此您正在测试表单在错误的循环中是否有效。你想要这个:
if request.method == 'POST':
section_formset = SectionFormSet(request.POST, instance=<an instance of Publication>, prefix='section')
if section_formset.is_valid():
instances = section_formset.save(commit=False)
for instance in instances:
#do something
instance.save()
return HttpResponseRedirect('<a url>')
else:
section_formset = SectionFormSet(instance=<an instance of Publication>, prefix='section')
如果您只是将剖面形式的“order”值保存到剖面模型命令attr中,则不需要执行实例循环 - 它已经为您完成了。你可以调用section_formset.save()。