объект «дикт» не имеет атрибута «МЕТА» ошибка перенаправления

#python #django

Вопрос:

извините за опечатки, я использую перевод

Я хочу интегрировать виртуальный pos для способа оплаты, но ошибка, которую я получил, выглядит следующим образом

Ошибка; объект ‘dict’ не имеет атрибута ‘META’

views.py:

 @login_required(login_url="/user/login")
def payment(request):
    options = {
        'api_key': 'api_key',
        'secret_key': 'secret_key',
        'base_url': 'sandbox-api.iyzipay.com'
    }
    
    
    payment_card = {
        'cardHolderName': 'John Doe',
        'cardNumber': '5528790000000008',
        'expireMonth': '12',
        'expireYear': '2030',
        'cvc': '123',
        'registerCard': '0'
    }
    
    buyer = {
        'id': 'BY789',
        'name': 'John',
        'surname': 'Doe',
        'gsmNumber': ' 905350000000',
        'email': 'email@email.com',
        'identityNumber': '74300864791',
        'lastLoginDate': '2015-10-05 12:43:35',
        'registrationDate': '2013-04-21 15:12:09',
        'registrationAddress': 'Nidakule Göztepe, Merdivenköy Mah. Bora Sok. No:1',
        'ip': '85.34.78.112',
        'city': 'Istanbul',
        'country': 'Turkey',
        'zipCode': '34732'
    }
    
    address = {
        'contactName': 'Jane Doe',
        'city': 'Istanbul',
        'country': 'Turkey',
        'address': 'Nidakule Göztepe, Merdivenköy Mah. Bora Sok. No:1',
        'zipCode': '34732'
    }
    
    basket_items = [
        {
            'id': 'BI101',
            'name': 'Binocular',
            'category1': 'Collectibles',
            'category2': 'Accessories',
            'itemType': 'PHYSICAL',
            'price': '0.3'
        },
        {
            'id': 'BI102',
            'name': 'Game code',
            'category1': 'Game',
            'category2': 'Online Game Items',
            'itemType': 'VIRTUAL',
            'price': '0.5'
        },
        {
            'id': 'BI103',
            'name': 'Usb',
            'category1': 'Electronics',
            'category2': 'Usb / Cable',
            'itemType': 'PHYSICAL',
            'price': '0.2'
        }
    ]
    
    request = {
        'locale': 'tr',
        'conversationId': '123456789',
        'price': '1',
        'paidPrice': '1.2',
        'currency': 'TRY',
        'installment': '1',
        'basketId': 'B67832',
        'paymentChannel': 'WEB',
        'paymentGroup': 'PRODUCT',
        'paymentCard': payment_card,
        'buyer': buyer,
        'shippingAddress': address,
        'billingAddress': address,
        'basketItems': basket_items
    }
    
    payment = iyzipay.Payment().create(request, options)
    return render(request, "cart/payment.html")
 

коды брокерских фирм;
https://github.com/iyzico/iyzipay-python

Может быть, вы можете осудить меня за попытку выполнить такую работу, не зная основ 🙂

Ответ №1:

Вы изменили значение запроса в своем коде в строке

 request = {'locale': 'tr',...
 

Это приводит к появлению строки

 return render(request, "cart/payment.html")
 

чтобы использовать измененное значение запроса вместо значения в

 def payment(request):
 

Попробуйте изменить имя переменной вашего запроса на что-то другое

экс:

 request_api = {'locale': 'tr',...
payment = iyzipay.Payment().create(request_api, options)
 

Ответ №2:

Вы переопределяете request переменную своим пользовательским диктом, из-за чего вы получаете ошибку метаданных.

Измените имя переменной dict request на что-то request_payload вроде :

 request_payload = {
    'locale': 'tr',
    'conversationId': '123456789',
    'price': '1',
    'paidPrice': '1.2',
    'currency': 'TRY',
    'installment': '1',
    'basketId': 'B67832',
    'paymentChannel': 'WEB',
    'paymentGroup': 'PRODUCT',
    'paymentCard': payment_card,
    'buyer': buyer,
    'shippingAddress': address,
    'billingAddress': address,
    'basketItems': basket_items
}
payment = iyzipay.Payment().create(request_payload, options)
return render(request, "cart/payment.html")
 

Вот и все.

Комментарии:

1. Спасибо за оба комментария, моя проблема решена