Как сохранить данные формы из другого шаблона url

как мне не сохранять данные формы до завершения транзакции, которая находится в другом URL, если бы форма доставки и варианты оплаты находились в одном URL, то не было бы этой проблемы, но это не так, поэтому как мне поступить? спасибо!

views.py

def checkout(request):

    if request.method == 'POST':
        form = ShippingForm(request.POST)
        if form.is_valid():
            new_shipping = form.save(commit=False)
            new_shipping.customer = customer
            new_shipping.order = order

            #how do I not save the data until the transaction is successful

            new_shipping.save()
            return redirect('store:checkout_shipping')
        else:
            form = ShippingForm()
    else:
        form = ShippingForm()

    context = {"form": form}
    return render(request, 'shop/checkout.html', context)


def checkout_payment(request):
        
    return render(request, 'shop/checkout_payment.html', context)

urls.py

path('checkout', views.checkout, name="checkout"),
path('checkout_payment', views.checkout_payment, name="checkout_payment"),

forms.py

class ShippingForm(forms.ModelForm):
    address_one = forms.CharField(max_length=200)
    address_two = forms.CharField(max_length=200)
<
from django.forms.models import model_to_dict

def checkout(request):
    form = ShippingForm(request.POST or None)
    
    if form.is_valid():
        new_shipping = form.save(commit=False)
        new_shipping.customer = customer
        new_shipping.order = order
        
        request.session['partial-data'] = model_to_dict(new_shipping)

        return redirect('store:checkout_shipping')


    context = {"form": form}
    return render(request, 'shop/checkout.html', context)


def checkout_payment(request):

    # I'm guessing here is where the rest of the data 
    # is to be filled in.  The data of the previous view
    # is already here stored in the cookie
    
    full-form-data = request.session['partial-data']
    full-form-data['extra-field-1'] = 'something'
    full-form-data['extra-field-2'} = 'something else'

    form = ShippingForm(full-form-data or None)
    if form.is_valid():
        form.save()

    context = {
        'form': form
    }
    
        
    return render(request, 'shop/checkout_payment.html', context)
Вернуться на верх