TypeError: PaystackPayment() отсутствует 1 позиционный аргумент: "запрос"

Я получаю ошибку

PaystackPayment() missing 1 required positional argument: 'request'

в строке 246 моего core.views проекта Ecommerce при попытке обратиться к функции PaystackPayment(). Я не знаю, что не так.

просмотров:

def PaystackPayment(request):
    try:
        order = Order.objects.get(user=request.user, ordered=False)
        secret_key = settings.PAYSTACK_SECRET_KEY
        ref = create_ref_code()
        amount = int(order.get_total() * 100)
        client_credentials = request.user.email
        paystack_call = TransactionResource(
            secret_key, ref)
        response = paystack_call.initialize(
            amount,
            client_credentials
        )

        authorization_url = response['data']['authorization_url']
        # create payment
        payment = PaystackPayment()
        payment.user = request.user
        payment.ref = ref
        payment.email = client_credentials
        payment.amount = int(order.get_total())
        payment.save()

       # assign the payment to the order
        order.ordered = True
        order.email = client_credentials
        order.ref_code = ref
        order.paystack_payment = payment.amount
        order.save()
        # send confirmation order email to the user
        subject = f'New Order Made by {request.user.username} today totaled {int(order.get_total())} '

        message = 'Hello there ' + \
            ', Thanks for your order. Your order has been received and it is being processed as we shall get back to you shortly. Thank you once again!'
        email_from = settings.EMAIL_HOST_USER
        recipient_list = [request.user.email, ]
        send_mail(subject, message, email_from, recipient_list)

        messages.success(request, 'Your order was successful')
        return redirect(authorization_url)
    except ObjectDoesNotExist:
        messages.info(
            request, """
                    Their was an error when you where possibly entering the checkout or payment fields.
                    You were not charged, try again!
                    """)
    return redirect('core:checkout')

Урлы:

from django.urls import path
from .views import (PurchaseSearch, PaystackPayment, Checkout)

app_name = 'core'

urlpatterns = [
path('checkout/', Checkout.as_view(), name='checkout'),
path('make-payment/', PaystackPayment, name='payment')

модель:

class PaystackPayment(models.Model):
    user = models.ForeignKey(User,
                             on_delete=models.SET_NULL, blank=True, null=True)
    amount = models.PositiveIntegerField()
    time_stamp = models.DateTimeField(auto_now_add=True)
    ref = models.CharField(max_length=20)
    email = models.EmailField()
    payment_verified = models.BooleanField(default=False)

    def __str__(self) -> str:
        return f'PaystackPayment: {self.amount}'

Имя вашего представления (PaystackPayment) совпадает с именем класса вашей модели. Следующая строка

payment = PaystackPayment()

пытается инстанцировать ваше представление, а не вашу модель.

Следование рекомендации PEP-8 об использовании snake_case для имен функций предотвратило бы эту специфическую ошибку (хотя это не серебряная пуля, например, в представлениях, основанных на классах):

def paystack_payment(request):
    ...
Вернуться на верх