Как мгновенно перенести данные из формы на другую страницу?

Помогите, пожалуйста! Я пишу простой сайт для пожертвований на Django. Хочу использовать платежную систему LiqPay.

Я описал форму, которая принимает данные от пользователя (def donation), но я не могу понять, как передать эти данные в другую функцию (class PayView, def get)

Я пробовал создать пользователя и затем взять из него поле 'amount', но я не хочу заставлять пользователей регистрироваться.

"PayView" отображается сразу после "submit" в "def donation"

Мой код:

views.py

def donation(request):
    if request.method == 'POST':
        form = CheckoutForm(request.POST)
        if form.is_valid():
            Donation.objects.create(**form.cleaned_data)
            return redirect('pay_view')
    else:
        form = CheckoutForm()
    return render(request, 'donation/donation.html',  {'form': form})


class PayView(TemplateView):
    template_name = 'donation/pay.html'

    def get(self, request, *args, **kwargs):

        liqpay = LiqPay(settings.LIQPAY_PUBLIC_KEY, settings.LIQPAY_PRIVATE_KEY)
        params = {
            'action': 'pay',
            'amount': '1',
            'currency': 'UAH',
            'description': 'Допомога фонду',
            'order_id': 'order_id_1',
            'version': '3',
            'sandbox': 1, # sandbox mode, set to 1 to enable it
            'server_url': '', # url to callback view
        }
        signature = liqpay.cnb_signature(params)
        data = liqpay.cnb_data(params)
        return render(request, self.template_name, {'signature': signature, 'data': data})

forms.py

from django import forms


class CheckoutForm(forms.Form):
    amount = forms.IntegerField()
    first_name = forms.CharField()
    last_name = forms.CharField()
    phone = forms.CharField()
    email = forms.EmailField()

Простите за глупый вопрос. Я очень новичок в этом.

Спасибо!

PayView отображается только после donation, тогда вы можете использовать django session

Вы можете сделать что-то вроде этого

def donation(request):
    ..
    ..
    ..
    if form.is_valid():
        donation_instance = Donation.objects.create(**form.cleaned_data)
        request.session["donation_instance"] = donation_instance.id
        return redirect('pay_view')


class PayView(TemplateView):
    template_name = 'donation/pay.html'

    def get(self, request, *args, **kwargs):

        # to initialize none instance for references issue
        donation_instance = Donation.objects.none()

        if "donation_instance" in request.session:
            donation_instance = Donation.objects.get(pk=request.session["donation_instance"])

        <use_your_donation_obj_here>
        ...
        ...

Ссылки:

Официальная документация по django session находится здесь

Вернуться на верх