我正在嘗試保存一對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