У меня есть представление, в котором я пытаюсь выполнить все следующие действия:
- Расширить существующую форму, добавив дополнительные поля, которые не соответствуют модели
- Проверкаесли данные формы действительны
- Создайте токен полосы и обработайте платеж
- Если этот платеж успешен, сохраните поля non-cc в форме в моем локальном БД
Я полагаю, что моя логика здесь верна, и если создается плата, то поля формы, соответствующие моей модели, будут сохранены в моей базе данных, и пользователю будет показана страница успеха или страница ошибки в противном случае.
Однако при попытке проверить я получаю сообщение об ошибке:
TypeError at /url/linked/to/view
__init__() takes 1 positional argument but 2 were given
При попытке решить эту проблему самостоятельно я столкнулся с этим вопросом.Судя по ответам на этот вопрос, короткий ответ, по-видимому, заключается в том, что добавление self
в качестве первого аргумента к соответствующему методу должно решить проблему, хотя в данном случае это не так.
Мое мнение:
class payment_order(View):
def post(self, request):
card_num = request.POST['card_num']
exp_month = request.POST['exp_month']
exp_year = request.POST['exp_year']
cvc = request.POST['cvc']
email = request.POST['email']
cart = Cart(request)
if request.method == 'POST':
form = OrderPayForm(request.POST)
if form.is_valid():
token = stripe.Token.create(
card={
"number": card_num,
"exp_month": int(exp_month),
"exp_year": int(exp_year),
"cvc": cvc
},
)
charge = stripe.Charge.create(
amount=cart.item['price'],
currency="usd",
source=token,
description="order for "+ email
)
if charge['captured'] == True:
order = form.save()
for item in cart:
OrderItem.objects.create(
order=order,
product=item['product'],
price=item['price'],
)
return render(request, 'orders/created.html', {'order': order})
else:
form = OrderPayForm()
return render(request, 'orders/create.html', {'form': form})
Я не переопределил __init__()
, и кроме использования полосовых методов и более глубокого уровня вложенности, чем мои другие представления, я не думаю, что делаю что-то необычное.Что вызывает эту ошибку в этом случае?