我正在尝试保存一对ModelFormset表单,但遇到IntegrityError。下面是代码: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()
此代码引起以下代码:
IntegrityError在[URL移除] (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的值。
在此先感谢。
不是问题的答案,但有一个在你的代码逻辑的问题:每个cc`的`的实例将被分配到bp`的`的* *最后例如,因为你分别遍历它们。 – 2011-02-14 10:23:16
真的......我已经限制了最大输入形式计数1,并且通过非迭代地进行更清洁。我发布了迭代代码,因为非迭代代码似乎有问题。 – John 2011-02-14 14:34:17