Django:保存ModelFormset表单时出现奇怪的IntegrityError

时间:2011-02-14 06:51:10

标签: python django

我正在尝试保存一些ModelFormset表单,但遇到了IntegrityError。这是代码:

    billing_formset = BillingFormSet(request.POST,prefix='billing')
    cc_formset = CCFormSet(request.POST,prefix='cc')

    if billing_formset.is_valid() and cc_formset.is_valid():
        bp = UserBillingProfile()
        cc = UserCreditCard()
        for form in billing_formset.forms:
            billing_profile = form.save(commit=False)
            billing_profile.user = request.user
            bp = billing_profile.save()
        for form in cc_formset.forms:
            cc = form.save(commit=False)
            cc.billing_profile = bp
            cc = form.save()

此代码导致以下代码:

  

删除[url]时的IntegrityError   (1048,“列'user_billing_profile_id'不能为空”)


编辑:这是一些迭代代码,也修复了我的错字。我遇到了基本相同的问题。

        billing_profile_form = billing_formset.forms[0]
        cc_form = cc_formset.forms[0]

        unsaved_billing_profile = billing_profile_form.save(commit=False)
        user_billing_profile = unsaved_billing_profile.save()

        unsaved_cc = cc_form.save(commit=False)
        unsaved_cc.user_billing_profile = user_billing_profile
        cc = unsaved_cc.save()

问题行给出:“无法分配无:”UserCreditCard.user_billing_profile“不允许空值。”似乎unsaved_billing_profile.save()返回null?为什么呢?


这有点疯狂;一切似乎都是正确的。保存结算资料时,我不会收到任何错误。关于我应该检查什么的任何想法?在第二个循环中似乎出现了问题,其中bp显然具有None值。

提前致谢。

1 个答案:

答案 0 :(得分:0)

这意味着您尝试将user_billing_profile设置为None保存模型实例,看起来您正在调用“billing_profile”而不是“user_billing_profile”。

每次commit = False时,“save”方法都返回None。你应该改为这样叫:

billing_profile.save()
bp = billing_profile.instance