我正在尝试保存一些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值。
提前致谢。
答案 0 :(得分:0)
这意味着您尝试将user_billing_profile设置为None保存模型实例,看起来您正在调用“billing_profile”而不是“user_billing_profile”。
每次commit = False时,“save”方法都返回None。你应该改为这样叫:
billing_profile.save()
bp = billing_profile.instance