Groups keyboard shortcuts have been updated
Dismiss
See shortcuts

Handle frozen baskets in checkout

32 views
Skip to first unread message

Javier Marcon

unread,
Dec 9, 2023, 9:56:29 PM12/9/23
to django...@googlegroups.com
Hello,

I'm implementing a new payment method (mercadopago) in a Django-Oscar 3.2 website and when the user hits the button in /checkout/preview, the basket gets frozen and he is redirected to mercadopago's website to finish the payment. The problem is that if he doesnt pay, the next time he wants to purchase something, we get an error becaue 2 the current order and the previous order are frozen:

2023-12-09 23:32:27,390: Order #100008: unhandled exception while taking payment (get() returned more than one Basket -- it returned 2!)
Traceback (most recent call last):
  File "/home/marketverde/market_verde/venv/lib/python3.10/site-packages/oscar/apps/checkout/views.py", line 613, in submit
    self.handle_payment(order_number, order_total, **payment_kwargs)
  File "/home/marketverde/market_verde/./market_verde/checkout/views.py", line 30, in handle_payment
    payment = facade.create_payment(
  File "/home/marketverde/market_verde/./oscar_mercadopago/facade.py", line 83, in create_payment
    current_basket = Basket.objects.get(owner_id=user, status=Basket.FROZEN)
  File "/home/marketverde/market_verde/venv/lib/python3.10/site-packages/django/db/models/manager.py", line 87, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "/home/marketverde/market_verde/venv/lib/python3.10/site-packages/django/db/models/query.py", line 640, in get
    raise self.model.MultipleObjectsReturned(
oscar.apps.basket.models.Basket.MultipleObjectsReturned: get() returned more than one Basket -- it returned 2!
2023-12-09 23:32:40,890: Order #100008: beginning submission process for basket #8
2023-12-09 23:32:40,898: Order #100008: unhandled exception while taking payment (get() returned more than one Basket -- it returned 2!)
Traceback (most recent call last):
  File "/home/marketverde/market_verde/venv/lib/python3.10/site-packages/oscar/apps/checkout/views.py", line 613, in submit
    self.handle_payment(order_number, order_total, **payment_kwargs)
  File "/home/marketverde/market_verde/./market_verde/checkout/views.py", line 30, in handle_payment
    payment = facade.create_payment(
  File "/home/marketverde/market_verde/./oscar_mercadopago/facade.py", line 83, in create_payment
    current_basket = Basket.objects.get(owner_id=user, status=Basket.FROZEN)
  File "/home/marketverde/market_verde/venv/lib/python3.10/site-packages/django/db/models/manager.py", line 87, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "/home/marketverde/market_verde/venv/lib/python3.10/site-packages/django/db/models/query.py", line 640, in get
    raise self.model.MultipleObjectsReturned(
oscar.apps.basket.models.Basket.MultipleObjectsReturned: get() returned more than one Basket -- it returned 2!

Which approach do you thing would be the best to solve it? It would be great if he can keep purchasing regardless of the frozen orders, because mercadopago allows paying at store, so an user can purchase something, print the paymet order, purchase another thing, then print the payment order for the second purchase, and then go to the store and pay both invoices.

Is there any similar case handled by Django Oscar?

Thanks,

Javier.





Reply all
Reply to author
Forward
0 new messages