2011-02-14 11 views
0

두 개의 ModelFormset 양식을 저장하려고하지만 IntegrityError로 실행 중입니다. 여기에 코드입니다 :이 코드는 다음 코드를 발생 Django : 이상한 IntegrityError (ModelFormset 양식 저장시)

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는 'null 일 수 없습니다 ")


편집 : 다음은 일부 오타를 수정하는 반복 코드입니다. 나는 기본적으로 같은 문제를 겪고있다.

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

문제 라인을 제공합니다 : "없음에 할당 할 수 없음 :" ". null 값을 허용하지 않습니다"UserCreditCard.user_billing_profile을 unsaved_billing_profile.save()가 null을 반환하고있는 것 같습니다. 왜?


이것은 다소 이상합니다. 모든 것이 옳은 것처럼 보입니다. 청구 프로필을 저장할 때 오류가 발생하지 않습니다. 내가 확인해야 할 아이디어가 있습니까? bp가 분명히 None 값을 갖는 두 번째 루프에서 문제가있는 것처럼 보입니다.

미리 감사드립니다.

+0

하지 대답을하지만 코드에서 논리 문제가있을 : cc''의 각각의 인스턴스가 bp''의 * 마지막 * 인스턴스에 할당 될 것이다 때문에, 당신은 그들을 따로 따로 반복합니다. –

+0

참 ... 나는 최대 입력 양식 개수를 1로 제한했으며 비 반복적으로 처리함으로써 더 깨끗하게 만들었습니다. 반복 코드를 게시 한 이유는 비 반복 코드가 잘못된 것으로 보였기 때문입니다. – John

답변

0

이것은 "user_billing_profile"대신 "billing_profile"을 호출하는 것처럼 보이는 user_billing_profile이 None으로 설정된 모델 인스턴스를 저장하려고한다는 것을 의미합니다.

"저장"메서드는 commit = False가 지정되지 않을 때마다 없음을 반환합니다. 대신이 같은 호출해야합니다 :

billing_profile.save() 
bp = billing_profile.instance 
+0

또한 true (죄송합니다!). 이 문제를 해결했지만 billing_profile.save() 호출이 bp null을 만드는 것으로 보입니다. 반복 코드를 게시하면 루프가 문제를 일으키지 않는 것이 확실합니다. – John

+0

이 응답을 수정했습니다. 도움이되기를 바랍니다. – juanefren