【问题标题】:change boolean field to True after Payment?付款后将布尔字段更改为True?
【发布时间】:2021-06-05 17:19:27
【问题描述】:

我使用条纹 Api 付款方式,并且我的数据库中有一个布尔值,名为 ordered 设置为 False

我只是希望它在付款后是真实的

这是我的views.py:

class OrderSummary(LoginRequiredMixin, View):
    def post(self, request, *args, **kwargs):
        order = Order.objects.get(user=self.request.user) #this is to bring the order
        delivered = order.ordered
        YOUR_DOMAIN = "http://127.0.0.1:8000"
        checkout_session = stripe.checkout.Session.create(
         payment_method_types=['card'],
             metadata={
                "order_id":order.id,
                "order":order,
                "delivered":delivered
            },
            mode='payment',
            success_url=YOUR_DOMAIN + "/",
            cancel_url=YOUR_DOMAIN + "/",
        )
        
        return JsonResponse({'id': checkout_session.id})

这是付款后的 webhook 视图:

@csrf_exempt 
def stripe_webhook(request):
    payload = request.body
    sig_header = request.META['HTTP_STRIPE_SIGNATURE']
    event = None
    try:
        event = stripe.Webhook.construct_event(
        payload, sig_header, endpoint_secret
        )
       

    except ValueError as e:
        # Invalid payload
        return HttpResponse(status=400)
    except stripe.error.SignatureVerificationError as e:
        # Invalid signature
        return HttpResponse(status=400)
    if event['type'] == 'checkout.session.completed': #this is to bring the order
        session = event['data']['object']
        customer_email = session["customer_details"]["email"]
        orders =session["metadata"]["delivered"]
        orders=True
        orders.save()
        print(session)
    # Passed signature verification

    return HttpResponse(status=200)

但我收到了这个错误

AttributeError: 'bool' object has no attribute 'save'

【问题讨论】:

  • 您可能需要一些错误处理,但最重要的是,您将“订单”分配为字符串值和布尔值。那是行不通的。您可能希望将订单更改为其他值以获得真/假值
  • 别的什么喜欢什么!!
  • 对别人大喊大叫不会得到太多帮助。祝你好运
  • 对不起,我不是故意大喊大叫,我只是想大写,对不起,伙计

标签: python django django-views stripe-payments


【解决方案1】:

您正在对不是您的模型对象的变量调用 save。

试试:

Order= OrderSummary.Objects.get(id=id)
Order.Ordered=True
Order.save()

【讨论】:

  • 选择此作为答案,以便您的问题可以帮助其他人。
【解决方案2】:

这是因为您不能 .save() 变量(此处为订单),您必须 .save() 模型,因此您必须检索 Order 对象并将其 ordered 设置为 True,然后 .save() Order对象。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-07
    • 1970-01-01
    • 1970-01-01
    • 2021-06-09
    • 1970-01-01
    相关资源
    最近更新 更多