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

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

просмотры.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"),

формы.py

class ShippingForm(forms.ModelForm):
    address_one = forms.CharField(max_length=200)
    address_two = forms.CharField(max_length=200)
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
26
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я думаю, что может помочь использование сессии. Django будет хранить эти временные данные с помощью файлов cookie сеанса. Вот идея:

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)

Другие вопросы по теме