Search code examples
pythondjangoinline-formset

Save a new record from formset instance


I need to save a new record from the exitsing instance of inline formset. I managed to save a new instance from the parent model (Order), but I can't figure out how to save a new instance of a formset. The code is like this:

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

Solution

  • Alright, I've come to a solution:

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