我正在尝试执行以下所有操作:


扩展现有表单以包含不包含的其他字段
对应一个模型
检查表格数据是否有效
生成条纹令牌并处理费用
如果该收费成功,则将表单中的非抄送字段保存到我的本地数据库中


我相信我的逻辑在这里是完全正确的,并且如果创建了费用,则与我的模型相对应的表单字段将保存到我的数据库中,并向用户显示成功页面,否则将显示错误页面。

但是,在尝试测试时,出现错误:

TypeError at /url/linked/to/view
__init__() takes 1 positional argument but 2 were given


在尝试独自解决此问题时,遇到了this问题。根据该问题的答案,简短的答案似乎是在相关方法中添加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__(),除了使用条纹方法和比其他视图更深入的嵌套之外,我认为我没有做任何不寻常的事情。是什么原因导致此错误?

最佳答案

如果有人发布更好的解决方案,我将删除此答案,但我认为如果其他人遇到类似问题,它可能会对其他人有所帮助。

基本上,我已通过从基于类的视图切换到基于函数的视图并在最后几行略微更改了逻辑来解决了这一问题。

我的新观点似乎正在起作用:

def payment_order(request):
    card_num = request.POST.get('card_num', False)
    exp_month = request.POST.get('exp_month', False)
    exp_year = request.POST.get('exp_year ', False)
    cvc = request.POST.get('cvc', False)
    email = request.POST.get('email', False)
    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})
    form = OrderPayForm()
    return render(request, 'orders/create.html', {'form': form})

关于python - django中的嵌套 View 由于传递给__init __()的附加参数而导致TypeError,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55109763/

10-11 08:31