Продолжительность, соответствующая запросу, не существует

Traceback (last recent call last):


  File "/home/ahmed/SavannahX/venv/lib/python3.9/site-packages/django/core/handlers/exception.py", line 55, in inner
    response = get_response(request)
  File "/home/ahmed/SavannahX/venv/lib/python3.9/site-packages/django/core/handlers/base.py", line 197, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/home/ahmed/SavannahX/venv/lib/python3.9/site-packages/django/contrib/auth/decorators.py", line 23, in _wrapped_view
    return view_func(request, *args, **kwargs)
  File "/home/ahmed/SavannahX/app/views.py", line 1352, in yearly_subscription_plans
    duration = Duration.objects.get(name="yearly")
  File "/home/ahmed/SavannahX/venv/lib/python3.9/site-packages/```

django/db/models/manager.py", строка 85, в manager_method return getattr(self.get_queryset(), name)(*args, **kwargs) Файл "/home/ahmed/SavannahX/venv/lib/python3.9/site-packages/django/db/models/query.py", строка 496, in get raise self.model.DoesNotExist(

)

Exception Type: DoesNotExist at /yearly/subscriptions/
Exception Value: Duration matching query does not exist.

Вы используете функцию .get(), но она не нашла подходящего объекта. В этом и заключается опасность использования get, она вызывает исключение, если объект не найден. Функция .filter(), напротив, вернет пустой набор запросов. Вы можете либо:

  1. Используйте функцию get_object_or_404, которая возвращает HTTP-ответ 404, если объект не найден.

    from django.shortcuts import get_object_or_404
    
    duration = get_object_or_404(Duration, pk=pk)
    

    or

  2. Заверните get() в обертку try/except:

    try:
       Duration.objects.get(name="yearly")
    except:
       # do something else, probably return 404...
    

duration = Duration.objects.get(name="yearly")

приведенный выше код выдает ошибку, так как метод get выдает ошибку "DoesNotExist", если объект не найден и может быть обработан следующим образом

Первый метод

Duration.objects.filter(name="yearly").first()

Второй метод

from django.shortcuts import get_object_or_404
duration = get_object_or_404(Duration, pk=pk)

Третий метод

try:
Duration.objects.get(name="yearly")
except:
# пожалуйста, обработайте исключение здесь

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