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.