在同一视图中将外键保存到模型中时,您经常会看到:
<div id="box">
<div>
<div>
</div>
</div>
<div>
<div>
</div>
</div>
</div>
<script src="https://code.jquery.com/jquery-2.2.1.min.js" integrity="sha256-gvQgAFzTH6trSrAWoH1iPo9Xc96QxSZ3feW6kem+O00=" crossorigin="anonymous"></script>
<script>
var count=$('#box').find('div').length;
alert(count) // the result is 4 because counts all divs
var count=$('#box > div').length;
alert(count) // the result is 2 because counts all divs within the first one
</script>
但是对于循环遍历每个表单的表单集,您将多次保存form1对象(这会做什么吗?)并且可能存在一个在循环中无效的表单。
除非我遗漏了某些内容,否则我提出的解决方案是首先执行所有有效性检查,然后在确保一切有效后再次检查formset(需要经过两次)或在确保有效后保存form1对象,但如果遇到无效的formset中的某些内容,请将其删除。
答案 0 :(得分:0)
从@karthikr的评论中我看到我哪里出错了。我原本以为您必须单独验证formset中的每个表单,但formset.is_valid()
涵盖每个表单,只要您在所有formset检查后保存表单,那么它应该没问题。
if form1.is_valid():
if formset.is_valid():
form1_obj = form1.save()
for form in formset:
form_obj = form.save(commit=False)
form_obj.foreign_key = form1_obj
form_obj.save()