Продолжительность, соответствующая запросу, не существует
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()
, напротив, вернет пустой набор запросов. Вы можете либо:
Используйте функцию
get_object_or_404
, которая возвращает HTTP-ответ 404, если объект не найден.from django.shortcuts import get_object_or_404 duration = get_object_or_404(Duration, pk=pk)
or
Заверните
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:
# пожалуйста, обработайте исключение здесь