付款后是否将布尔字段更改为True?

2024-05-15 06:04:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用StripeAPI支付方法,我的数据库中有一个名为ordered的布尔字段设置为False

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

以下是我的视图.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'

Tags: eventidyourreturnrequestsessiondomainstatus
2条回答

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

尝试:

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

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

相关问题 更多 >

    热门问题