在检查另一个formset的有效性之前保存模型(对于外键)

时间:2016-03-17 14:33:02

标签: python django

在同一视图中将外键保存到模型中时,您经常会看到:

<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中的某些内容,请将其删除。

1 个答案:

答案 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()