2016-05-11 16 views
0

エラー:ジャンゴ - のidはnull - 外部キーエラー

app_a.desc_id may not be NULL 

私は私の問題は、私が保存したときに、私はformAformBからidを渡していないよと考えています。この問題の解決策に私を導いてください。ここで

が私の見解です。ここ

def form(request): 
    if request.method == 'GET': 
     formB = BForm() 
     formA = AForm() 
     return render(request,r'app/form.html',{'formA':formA,'formB':formB}) 
    elif request.method == 'POST': 
     formA = AForm(request.POST) 
     formB = BForm(request.POST) 
     formB.save() 
     formA.save() 
     return HttpResponseRedirect('/log') 

は私のモデルです:

# Descprition 
class B(models.Model): 
    id = models.AutoField(primary_key=True) 
    description = models.CharField(max_length=50) 

# Title 
class A(models.Model): 
    id = models.AutoField(primary_key=True) 
    name = models.CharField('Name',max_length=20) 
    desc = models.ForeignKey(B) 

、ここでは私のフォームです:

class BForm(forms.ModelForm): 
    class Meta: 
     model = B 
     fields = ['description'] 

class AForm(forms.ModelForm): 
    class Meta: 
     model = A 
     fields = ['name'] 

答えて

2

あなたのプログラムが複数のエラーが、のための主要な問題を抱えていますこれは、descがの外部キーで、を指しているためですであり、その上にnull=Trueがないため、そのフィールドを空にしたくないということです。つまり、Aの各インスタンスには、外部キーdescが必要です。

したがって、エラーをdescフィールドの値を持たず、Aのインスタンスを保存しようとformAあなただけのsave()両方のフォーム、もし。冗長idフィールド(あなたのための1つを作成することになりジャンゴ)を有する、form.is_valid()呼び出されることはありませんなど、あなたのプログラムに

new_b = formB.save() 
new_a = formA.save(commit=False) 
new_a.desc = new_b 
new_a.save() 

その他の問題:あなたはformBformAが作成するインスタンスに作成するインスタンスを割り当てる必要があります。コーディングに入る前にまずdjangoチュートリアルを読むことをお勧めします。このようなエラーを見つけ出すのと同じように、多くの時間を節約できます。

+0

ありがとうございます! – MintDrop

関連する問題