2017-10-28 12 views
0

1対1フィールドを持つフォームを保存しようとしています。Django 1対1フィールドが保存されません(非null制約違反)

ただし、エラーが発生し続ける「account_id」列のNULL値がNULL以外の制約に違反しています。

なぜ新しいアカウントオブジェクトを1対1フィールドに保存できなかったのか分かりません。すべてのあなたの助けを

モデル

class Account(models.Model): 
    name = models.CharField(max_length=30) 

class Bank(models.Model): 
    account = models.OneToOneField(Account, on_delete=models.CASCADE, primary_key=True) 
    bank_name = models.CharField(max_length=30) 

ビュー

def add_bank_view(request): 

    if request.method == 'POST': 
     form = BankForm(request.POST) 
     if form.is_valid(): 
      account = Account.objects.create(name='xxx') 
      bankform = form.save(commit=False) 
      bankform.account = account 
      bankform.save() 
     return HttpResponseRedirect('/add_banks/') 
    else: 
     form = BankForm() 
    return render(request, 'bank/add_bank.html', {'form': form}) 

フォーム

class BankForm(forms.ModelForm): 

class Meta: 
    model = Bank 
    fields = ['bank_name'] 
+0

アカウントオブジェクトにはこの時点でpkがありますか?あなたはaccount.pkを印刷し、割り当ての前に結果を得ることができますか?データベースエンジンがトランザクションの周りに面白いことがあります。 – fixmycode

+0

'account = Account.objects.create(bank_name = 'xxx')これを試すことができます – Roshan

+0

エラーの完全なスタックトレースを投稿してください。 – solarissmoke

答えて

0

感謝。

Accountフィールドがまだ設定されていない場合、1対1フィールドの場合はModelFormを使用できないことがわかりました。解決策は、基本フォームを使用し、基本フォームのデータを使用して、ビューに勘定コードと銀行レコードの両方を設定することです。

関連する問題