Django Python - функция .get возвращает DoesNotExist, если запрос не существует

Я действительно зашел в тупик со следующей проблемой... Я пытаюсь получить номер заказа после принятия платежа через Stripe. Stripe возвращает сообщение о завершении платежа и все работает, на странице успеха я вызываю функцию ниже, чтобы получить номер заказа из таблицы сессии.

Странно то, что, хотя он выдает ошибку DoesNotExist, он находит правильный номер заказа и возвращает номер заказа, и все данные действительно обслуживаются.

Функция

def get_order_number(session_id):
    order = session_order_table.objects.get(session_id=session_id)
    order_number = order.order_number
    return order_number

функция страницы успеха

def success_page(request):
    summary_orders = None
    session_id = request.session["USER_SESSION_ID"]
    order_number = get_order_number(session_id)
    print('###############SESSION_ID######################')
    print(session_id)
    print(order_number)
    online_order = My_Cart_History_Model.objects.filter(order_number=order_number)
....

error

1820bd97c5"\n  },\n  "type": "payment_intent.succeeded"\n}'
1x 777 test (Quality:VVS, Size: L, Color: yellow-gold)
C:\Users\akram\AppData\Local\Programs\Python\Python39\lib\site-packages\django\db\models\fields\__init__.py:1416: RuntimeWarning: DateTimeField My_Cart_History_Model.transaction_date received a naive datetime (2021-12-31 07:21:41) while time zone support is active.
  warnings.warn("DateTimeField %s received a naive datetime (%s)"
Internal Server Error: /cart/my_webhook_view/
Traceback (most recent call last):
  File "C:\Users\akram\AppData\Local\Programs\Python\Python39\lib\site-packages\django\core\handlers\exception.py", line 47, in inner
    response = get_response(request)
  File "C:\Users\akram\AppData\Local\Programs\Python\Python39\lib\site-packages\django\core\handlers\base.py", line 181, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "C:\Users\akram\AppData\Local\Programs\Python\Python39\lib\site-packages\django\views\decorators\csrf.py", line 54, in wrapped_view
    return view_func(*args, **kwargs)
  File "D:\pwl-server\django\t7\cart\views.py", line 533, in my_webhook_view
    fulfil_order(request=request  ,payload=payload,session=session)
  File "D:\pwl-server\django\t7\cart\views.py", line 594, in fulfil_order
    return success_page(request=request)
  File "D:\pwl-server\django\t7\cart\views.py", line 677, in success_page
    order_number = get_order_number(session_id)
  File "D:\pwl-server\django\t7\cart\views.py", line 667, in get_order_number
    order = session_order_table.objects.get(session_id=session_id)
  File "C:\Users\akram\AppData\Local\Programs\Python\Python39\lib\site-packages\django\db\models\manager.py", line 85, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "C:\Users\akram\AppData\Local\Programs\Python\Python39\lib\site-packages\django\db\models\query.py", line 435, in get
    raise self.model.DoesNotExist(
cart.models.session_order_table.DoesNotExist: session_order_table matching query does not exist.
[31/Dec/2021 08:21:41] "POST /cart/my_webhook_view/ HTTP/1.1" 500 129026
-->>  charge.succeeded
[31/Dec/2021 08:21:41] "POST /cart/my_webhook_view/ HTTP/1.1" 200 0
-->>  checkout.session.completed
[31/Dec/2021 08:21:41] "POST /cart/my_webhook_view/ HTTP/1.1" 200 0
###############SESSION_ID######################
88b75c8c-c606-4d14-a3d3-25b09348bd8c
101108688771034396
[31/Dec/2021 08:21:45] "GET /cart/success_page/ HTTP/1.1" 200 14899

Я попробовал использовать метод filter, хотя я не согласен, что его следует использовать. Когда я это делаю, он говорит, что у нетипа нет атрибута order_number, даже если я выбрал его с помощью .first()

Я проверил, что находится в базе данных и что ищется, все выглядит идеально. Функция get не должна давать сбоев.

Любая помощь будет оценена по достоинству

Возможно, вам нужно проверить ваш файл models.py, где есть связь между заказом и сессией. Также, в методе "filter". вы можете добавить блок "if order:" перед получением части order.order_number.

Вернуться на верх