2017-01-14 10 views
1

インラインformsetの終了インスタンスから新しいレコードを保存する必要があります。私は親モデル(Order)から新しいインスタンスを保存することができましたが、フォームセットの新しいインスタンスを保存する方法を理解できません。コードは次のようになります。formsetインスタンスから新しいレコードを保存する

def order(request, date): 
    edit = Order.objects.get(date=date, user=None) 
    edit_formset = modelformset_factory(Order_items, fields='__all__', extra=0) 
    if request.method == 'POST': 
     form = OrderForm(request.POST, instance=edit) 
     formset = edit_formset(request.POST, queryset=Order_items.objects.filter(order__date=date)) 
     if form.is_valid(): 
      instance = form.save(commit=False) 
      instance.pk = None 
      instance.user_id = request.user.id 
      if formset.is_valid(): 
       form.save() 
       formset.save() 
      return HttpResponseRedirect('order') 
    else: 
     form = OrderForm(instance=edit) 
     formset = edit_formset(queryset=Order_items.objects.filter(order__date=date)) 
     return render(request, 'diner/order.html', {'edit': edit, 'form': form, 'formset': formset}) 
+0

フォームセットのポイントは、それが複数のフォームが含まれていることですので、あなたは、「フォームセットの新しいインスタンス」について何を意味するかわかりません。しかし、あなたが提起したコードの何が間違っていますか?それはあなたが期待していないこと、またはあなたが期待していることをしていないことは何ですか?どのようなエラーが出ますか? –

+0

既存のレコードを編集して新しいレコードを保存する必要があります。問題は、コードがOrderテーブルの新しいレコードを保存しますが、Order_itemsに新しいテーブルを作成しないことです。 – ZmuA

+0

おそらく、 'formset_is_valid()'はFalseですが、その場合は依然としてリダイレクトします。 –

答えて

0

さてさて、私は解決策に来ている:

if form.is_valid(): 
    form.cleaned_data['pk'] = None 
    if formset.is_valid(): 
      create_order = Order.objects.create(date=form.cleaned_data['date'], user_id=request.user.id) 
      new = formset.save(commit=False) 
      for n in new: 
       n.id = None 
       n.order_id = create_order.id 
       create_order.save() 
       n.save() 
0

これを試すことができます。

if request.method == 'POST': 
    form = OrderForm(request.POST, instance=edit) 
    formset = edit_formset(request.POST) 
    If form.is_valid(): 
     instance = form.save(commit=False) 
     instance.pk = None 
     instance.user_id = request.user.id 
     form.save() 
     if formset.is_valid(): 
      add_new = formset.save(commit=False) 
      add_new.instance = instance 
      add_new.save() 
      return HttpResponseRedirect('order') 

あなたはフォームセット= edit_formset(request.POST、インスタンス=編集)でインスタンスを定義しているポスト要求しながら、フォームセットを節約しながらので、それはあなたが編集」と命名古い秩序のためのORDER_ITEMを保存するので、 '新しいものではない。 add_new.instance = instanceは、formsetの新しいインスタンスの作成に役立ちます。

+0

それはそうではありません。 Formsetには 'instance'属性がありません。そのため、できません。 – ZmuA

関連する問題