at /embedded_api/training/8/dates/
DoesNotExist
at /embedded_api/training/8/dates/
Training matching query does not exist.
Request Method: | GET |
---|---|
Request URL: | http://nsb-booking.clients.taliox.net/embedded_api/training/8/dates/ |
Django Version: | 2.1.5 |
Exception Type: | DoesNotExist |
Exception Value: |
Training matching query does not exist. |
Exception Location: | /usr/local/lib/python3.8/site-packages/django/db/models/query.py in get, line 397 |
Python Executable: | /usr/local/bin/python3.8 |
Python Version: | 3.8.20 |
Python Path: |
['/app/gabaeck', '/app', '/usr/local/bin', '/usr/local/lib/python38.zip', '/usr/local/lib/python3.8', '/usr/local/lib/python3.8/lib-dynload', '/root/.local/lib/python3.8/site-packages', '/usr/local/lib/python3.8/site-packages'] |
Server time: | Sun, 22 Dec 2024 06:19:39 +0000 |
Traceback
Switch to copy-and-paste view
-
/usr/local/lib/python3.8/site-packages/django/core/handlers/exception.py
ininner
-
This decorator is automatically applied to all middleware to ensure that
-
no middleware leaks an exception and that the next middleware in the stack
-
can rely on getting a response instead of an exception.
-
"""
-
@wraps(get_response)
-
def inner(request):
-
try:
-
response = get_response(request)
...
-
except Exception as exc:
-
response = response_for_exception(request, exc)
-
return response
-
return inner
Variable Value exc DoesNotExist('Training matching query does not exist.')
get_response <bound method BaseHandler._get_response of <django.core.handlers.wsgi.WSGIHandler object at 0x7f0ea7138d90>>
request <WSGIRequest: GET '/embedded_api/training/8/dates/'>
-
-
/usr/local/lib/python3.8/site-packages/django/core/handlers/base.py
in_get_response
-
break
-
if response is None:
-
wrapped_callback = self.make_view_atomic(callback)
-
try:
-
response = wrapped_callback(request, *callback_args, **callback_kwargs)
-
except Exception as e:
-
response = self.process_exception_by_middleware(e, request)
...
-
# Complain if the view returned None (a common error).
-
if response is None:
-
if isinstance(callback, types.FunctionType): # FBV
-
view_name = callback.__name__
-
else: # CBV
Variable Value callback <function TrainingDetailView at 0x7f0ea4d0bf70>
callback_args ()
callback_kwargs {'training_id': '8'}
middleware_method <bound method CsrfViewMiddleware.process_view of <django.middleware.csrf.CsrfViewMiddleware object at 0x7f0ea54a7b50>>
request <WSGIRequest: GET '/embedded_api/training/8/dates/'>
resolver <URLResolver 'gabaeck.urls' (None:None) '^/'>
resolver_match ResolverMatch(func=backend.views.embedded_api.TrainingDetailView, args=(), kwargs={'training_id': '8'}, url_name=embedded_api.training_detail, app_names=[], namespaces=[])
response None
self <django.core.handlers.wsgi.WSGIHandler object at 0x7f0ea7138d90>
wrapped_callback <function TrainingDetailView at 0x7f0ea4d0bf70>
-
-
/usr/local/lib/python3.8/site-packages/django/core/handlers/base.py
in_get_response
-
response = middleware_method(request, callback, callback_args, callback_kwargs)
-
if response:
-
break
-
if response is None:
-
wrapped_callback = self.make_view_atomic(callback)
-
try:
-
response = wrapped_callback(request, *callback_args, **callback_kwargs)
...
-
except Exception as e:
-
response = self.process_exception_by_middleware(e, request)
-
# Complain if the view returned None (a common error).
-
if response is None:
-
if isinstance(callback, types.FunctionType): # FBV
Variable Value callback <function TrainingDetailView at 0x7f0ea4d0bf70>
callback_args ()
callback_kwargs {'training_id': '8'}
middleware_method <bound method CsrfViewMiddleware.process_view of <django.middleware.csrf.CsrfViewMiddleware object at 0x7f0ea54a7b50>>
request <WSGIRequest: GET '/embedded_api/training/8/dates/'>
resolver <URLResolver 'gabaeck.urls' (None:None) '^/'>
resolver_match ResolverMatch(func=backend.views.embedded_api.TrainingDetailView, args=(), kwargs={'training_id': '8'}, url_name=embedded_api.training_detail, app_names=[], namespaces=[])
response None
self <django.core.handlers.wsgi.WSGIHandler object at 0x7f0ea7138d90>
wrapped_callback <function TrainingDetailView at 0x7f0ea4d0bf70>
-
-
/usr/local/lib/python3.8/site-packages/django/views/generic/base.py
inview
-
def view(request, *args, **kwargs):
-
self = cls(**initkwargs)
-
if hasattr(self, 'get') and not hasattr(self, 'head'):
-
self.head = self.get
-
self.request = request
-
self.args = args
-
self.kwargs = kwargs
-
return self.dispatch(request, *args, **kwargs)
...
-
view.view_class = cls
-
view.view_initkwargs = initkwargs
-
# take name and docstring from class
-
update_wrapper(view, cls, updated=())
Variable Value args ()
cls <class 'backend.views.embedded_api.TrainingDetailView'>
initkwargs {}
kwargs {'training_id': '8'}
request <WSGIRequest: GET '/embedded_api/training/8/dates/'>
self <backend.views.embedded_api.TrainingDetailView object at 0x7f0ea487aac0>
-
-
/usr/local/lib/python3.8/site-packages/django/views/generic/base.py
indispatch
-
# Try to dispatch to the right method; if a method doesn't exist,
-
# defer to the error handler. Also defer to the error handler if the
-
# request method isn't on the approved list.
-
if request.method.lower() in self.http_method_names:
-
handler = getattr(self, request.method.lower(), self.http_method_not_allowed)
-
else:
-
handler = self.http_method_not_allowed
-
return handler(request, *args, **kwargs)
...
-
def http_method_not_allowed(self, request, *args, **kwargs):
-
logger.warning(
-
'Method Not Allowed (%s): %s', request.method, request.path,
-
extra={'status_code': 405, 'request': request}
-
)
Variable Value args ()
handler <bound method TrainingDetailView.get of <backend.views.embedded_api.TrainingDetailView object at 0x7f0ea487aac0>>
kwargs {'training_id': '8'}
request <WSGIRequest: GET '/embedded_api/training/8/dates/'>
self <backend.views.embedded_api.TrainingDetailView object at 0x7f0ea487aac0>
-
-
/app/backend/views/embedded_api.py
inget
-
class CatchallView(views.View):
-
def get(self, request: HttpRequest):
-
path = request.GET.get("p")
-
class TrainingDetailView(views.View):
-
def get(self, request: HttpRequest, training_id):
-
training = Training.objects.get(pk=training_id)
...
-
training_dates = (
-
training.trainingdate_set
-
.filter(start__gt=timezone.now())
-
.filter(deleted_at__isnull=True)
-
.exclude(status=TrainingDate.CANCELED)
Variable Value request <WSGIRequest: GET '/embedded_api/training/8/dates/'>
self <backend.views.embedded_api.TrainingDetailView object at 0x7f0ea487aac0>
training_id '8'
-
-
/usr/local/lib/python3.8/site-packages/django/db/models/manager.py
inmanager_method
-
def check(self, **kwargs):
-
return []
-
@classmethod
-
def _get_queryset_methods(cls, queryset_class):
-
def create_method(name, method):
-
def manager_method(self, *args, **kwargs):
-
return getattr(self.get_queryset(), name)(*args, **kwargs)
...
-
manager_method.__name__ = method.__name__
-
manager_method.__doc__ = method.__doc__
-
return manager_method
-
new_methods = {}
-
for name, method in inspect.getmembers(queryset_class, predicate=inspect.isfunction):
Variable Value args ()
kwargs {'pk': '8'}
name 'get'
self <backend.models.page_item.TrainingManager object at 0x7f0ea613d0a0>
-
-
/usr/local/lib/python3.8/site-packages/django/db/models/query.py
inget
-
clone = self.filter(*args, **kwargs)
-
if self.query.can_filter() and not self.query.distinct_fields:
-
clone = clone.order_by()
-
num = len(clone)
-
if num == 1:
-
return clone._result_cache[0]
-
if not num:
-
raise self.model.DoesNotExist(
...
-
"%s matching query does not exist." %
-
self.model._meta.object_name
-
)
-
raise self.model.MultipleObjectsReturned(
-
"get() returned more than one %s -- it returned %s!" %
-
(self.model._meta.object_name, num)
Variable Value args ()
clone <QuerySet []>
kwargs {'pk': '8'}
num 0
self <QuerySet [<Training: PI:11 training - Alternative Fuels>, <Training: PI:19 training - Bad Weather Preparation>, <Training: PI:10 training - Brushing up: ColReg knowledge>, <Training: PI:2 training - Brushing up proficiency as bridge team>, <Training: PI:23 training - Building a safer workplace through Good Housekeeping>, <Training: PI:9 training - Decarbonization in Shipping>, <Training: PI:21 training - Drain Oil Analysis - Early recognition of engine problems>, <Training: PI:26 training - Engine Power Limitation>, <Training: PI:1 training - Enhancing Safety Leadership: a shift from compliance to commitment>, <Training: PI:6 training - Evolving multi-cultural and multi-generational teams>, <Training: PI:17 training - Increasing Awareness: Risk Assessment>, <Training: PI:16 training - Issuance of Crew/Technical Dispensation/Exemption Letters>, <Training: PI:15 training - Lesson learned from Oil Spill Incident>, <Training: PI:22 training - Lubrication Oil Management>, <Training: PI:12 training - Machinery Space Fires>, <Training: PI:14 training - Marine Engine Troubles: Reason and Cure!>, <Training: PI:18 training - Mooring Operations>, <Training: PI:7 training - Planning Techniques that help the crew to keep work in track>, <Training: PI:3 training - Promotion check | New Joiner check (tailor-made)>, <Training: PI:5 training - Report writing (tailor-made)>, '...(remaining elements truncated)...']>
-
Request information
USER
AnonymousUser
GET
No GET data
POST
No POST data
FILES
No FILES data
COOKIES
No cookie data
META
Variable | Value |
---|---|
HTTP_ACCEPT |
'*/*' |
HTTP_ACCEPT_ENCODING |
'deflate, gzip, br' |
HTTP_CONNECTION |
'close' |
HTTP_HOST |
'nsb-booking.clients.taliox.net' |
HTTP_USER_AGENT |
'WordPress/6.7.1; https://nsb-academy.com' |
HTTP_X_FORWARDED_FOR |
'116.202.114.110' |
HTTP_X_FORWARDED_PROTO |
'https' |
HTTP_X_REAL_IP |
'116.202.114.110' |
PATH_INFO |
'/embedded_api/training/8/dates/' |
QUERY_STRING |
'' |
RAW_URI |
'/embedded_api/training/8/dates/' |
REMOTE_ADDR |
'192.168.32.1' |
REMOTE_PORT |
'55870' |
REQUEST_METHOD |
'GET' |
SCRIPT_NAME |
'' |
SERVER_NAME |
'0.0.0.0' |
SERVER_PORT |
'8000' |
SERVER_PROTOCOL |
'HTTP/1.0' |
SERVER_SOFTWARE |
'gunicorn/20.1.0' |
gunicorn.socket |
<socket.socket fd=9, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('192.168.32.4', 8000), raddr=('192.168.32.1', 55870)> |
wsgi.errors |
<gunicorn.http.wsgi.WSGIErrorsWrapper object at 0x7f0ea47a9e50> |
wsgi.file_wrapper |
'' |
wsgi.input |
<gunicorn.http.body.Body object at 0x7f0ea47a9f40> |
wsgi.input_terminated |
True |
wsgi.multiprocess |
True |
wsgi.multithread |
False |
wsgi.run_once |
False |
wsgi.url_scheme |
'http' |
wsgi.version |
(1, 0) |
Settings
Using settings module gabaeck.settings_prod
Setting | Value |
---|---|
ABSOLUTE_URL_OVERRIDES |
{} |
ADMINS |
[] |
ALLOWED_HOSTS |
['nsbbackend.staging.taliox.net', 'nsb-booking.clients.taliox.net'] |
APPEND_SLASH |
True |
AUTHENTICATION_BACKENDS |
['django.contrib.auth.backends.ModelBackend'] |
AUTH_PASSWORD_VALIDATORS |
'********************' |
AUTH_USER_MODEL |
'accounts.User' |
BASE_DIR |
'/app' |
CACHES |
{'cron_cache': {'BACKEND': 'django.core.cache.backends.db.DatabaseCache', 'LOCATION': 'cache_table_cron'}, 'default': {'BACKEND': 'django.core.cache.backends.locmem.LocMemCache'}} |
CACHE_MIDDLEWARE_ALIAS |
'default' |
CACHE_MIDDLEWARE_KEY_PREFIX |
'********************' |
CACHE_MIDDLEWARE_SECONDS |
600 |
CRON_CLASSES |
['backend.cronjobs.SendMailCronJob'] |
CSRF_COOKIE_AGE |
31449600 |
CSRF_COOKIE_DOMAIN |
None |
CSRF_COOKIE_HTTPONLY |
False |
CSRF_COOKIE_NAME |
'csrftoken' |
CSRF_COOKIE_PATH |
'/' |
CSRF_COOKIE_SAMESITE |
'Lax' |
CSRF_COOKIE_SECURE |
False |
CSRF_FAILURE_VIEW |
'django.views.csrf.csrf_failure' |
CSRF_HEADER_NAME |
'HTTP_X_CSRFTOKEN' |
CSRF_TRUSTED_ORIGINS |
[] |
CSRF_USE_SESSIONS |
False |
CURRENCIES |
('USD', 'EUR', 'MXN', 'CNY', 'THB', 'MYR', 'DKK', 'NOK', 'CHF') |
DATABASES |
{'default': {'ATOMIC_REQUESTS': False, 'AUTOCOMMIT': True, 'CONN_MAX_AGE': 0, 'ENGINE': 'django.db.backends.postgresql', 'HOST': 'database', 'NAME': 'elephant', 'OPTIONS': {}, 'PASSWORD': '********************', 'PORT': '5432', 'TEST': {'CHARSET': None, 'COLLATION': None, 'MIRROR': None, 'NAME': None}, 'TIME_ZONE': None, 'USER': 'elephant'}} |
DATABASE_ROUTERS |
[] |
DATA_UPLOAD_MAX_MEMORY_SIZE |
2621440 |
DATA_UPLOAD_MAX_NUMBER_FIELDS |
1000 |
DATETIME_FORMAT |
'd F Y H:i' |
DATETIME_INPUT_FORMATS |
['%Y-%m-%d %H:%M:%S', '%Y-%m-%d %H:%M:%S.%f', '%Y-%m-%d %H:%M', '%Y-%m-%d', '%m/%d/%Y %H:%M:%S', '%m/%d/%Y %H:%M:%S.%f', '%m/%d/%Y %H:%M', '%m/%d/%Y', '%m/%d/%y %H:%M:%S', '%m/%d/%y %H:%M:%S.%f', '%m/%d/%y %H:%M', '%m/%d/%y'] |
DATE_FORMAT |
'N j, Y' |
DATE_INPUT_FORMATS |
['%Y-%m-%d', '%m/%d/%Y', '%m/%d/%y', '%b %d %Y', '%b %d, %Y', '%d %b %Y', '%d %b, %Y', '%B %d %Y', '%B %d, %Y', '%d %B %Y', '%d %B, %Y'] |
DEBUG |
True |
DEBUG_PROPAGATE_EXCEPTIONS |
False |
DECIMAL_SEPARATOR |
'.' |
DEFAULT_CHARSET |
'utf-8' |
DEFAULT_CONTENT_TYPE |
'text/html' |
DEFAULT_EXCEPTION_REPORTER_FILTER |
'django.views.debug.SafeExceptionReporterFilter' |
DEFAULT_FILE_STORAGE |
'django.core.files.storage.FileSystemStorage' |
DEFAULT_FROM_EMAIL |
'webmaster@localhost' |
DEFAULT_INDEX_TABLESPACE |
'' |
DEFAULT_PAGE_SIZE |
20 |
DEFAULT_TABLESPACE |
'' |
DISALLOWED_USER_AGENTS |
[] |
DJANGO_CRON_CACHE |
'cron_cache' |
EMAIL_BACKEND |
'django.core.mail.backends.smtp.EmailBackend' |
EMAIL_HOST |
'localhost' |
EMAIL_HOST_PASSWORD |
'********************' |
EMAIL_HOST_USER |
'' |
EMAIL_PORT |
25 |
EMAIL_SSL_CERTFILE |
None |
EMAIL_SSL_KEYFILE |
'********************' |
EMAIL_SUBJECT_PREFIX |
'[Django] ' |
EMAIL_TIMEOUT |
None |
EMAIL_USE_LOCALTIME |
False |
EMAIL_USE_SSL |
False |
EMAIL_USE_TLS |
False |
FILE_CHARSET |
'utf-8' |
FILE_UPLOAD_DIRECTORY_PERMISSIONS |
None |
FILE_UPLOAD_HANDLERS |
['django.core.files.uploadhandler.MemoryFileUploadHandler', 'django.core.files.uploadhandler.TemporaryFileUploadHandler'] |
FILE_UPLOAD_MAX_MEMORY_SIZE |
2621440 |
FILE_UPLOAD_PERMISSIONS |
None |
FILE_UPLOAD_TEMP_DIR |
None |
FIRST_DAY_OF_WEEK |
0 |
FIXTURE_DIRS |
[] |
FORCE_SCRIPT_NAME |
None |
FORMAT_MODULE_PATH |
None |
FORM_RENDERER |
'django.forms.renderers.DjangoTemplates' |
IGNORABLE_404_URLS |
[] |
INSTALLED_APPS |
['backend.apps.BackendConfig', 'backapi.apps.BackapiConfig', 'accounts', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'django_icons', 'rest_framework', 'django.forms', 'djmoney', 'django_cron', 'elephant.apps.ElephantConfig'] |
INTERNAL_IPS |
['127.0.0.1'] |
LANGUAGES |
[('en', 'English')] |
LANGUAGES_BIDI |
['he', 'ar', 'fa', 'ur'] |
LANGUAGE_CODE |
'en' |
LANGUAGE_COOKIE_AGE |
None |
LANGUAGE_COOKIE_DOMAIN |
None |
LANGUAGE_COOKIE_NAME |
'django_language' |
LANGUAGE_COOKIE_PATH |
'/' |
LOCALE_PATHS |
[] |
LOGGING |
{'filters': {'require_debug_true': {'()': 'django.utils.log.RequireDebugTrue'}}, 'handlers': {'console': {'class': 'logging.StreamHandler', 'filters': ['require_debug_true'], 'level': 'DEBUG'}}, 'loggers': {'django.db.backends': {'handlers': ['console'], 'level': 'DEBUG'}}, 'version': 1} |
LOGGING_CONFIG |
'logging.config.dictConfig' |
LOGIN_REDIRECT_URL |
'/' |
LOGIN_URL |
'/login' |
LOGOUT_REDIRECT_URL |
'/login/' |
MANAGERS |
[] |
MEDIA_ROOT |
'/media' |
MEDIA_URL |
'/media/' |
MESSAGE_STORAGE |
'django.contrib.messages.storage.fallback.FallbackStorage' |
MIDDLEWARE |
['django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'django.middleware.locale.LocaleMiddleware'] |
MIGRATION_MODULES |
{} |
MONTH_DAY_FORMAT |
'F j' |
NUMBER_GROUPING |
0 |
PASSWORD_HASHERS |
'********************' |
PASSWORD_RESET_TIMEOUT_DAYS |
'********************' |
PREPEND_WWW |
False |
REST_FRAMEWORK |
{'DEFAULT_AUTHENTICATION_CLASSES': ('rest_framework.authentication.BasicAuthentication', 'rest_framework.authentication.SessionAuthentication')} |
ROOT_URLCONF |
'gabaeck.urls' |
ROUND_HALF_EVEN |
'ROUND_HALF_EVEN' |
SECRET_KEY |
'********************' |
SECURE_BROWSER_XSS_FILTER |
False |
SECURE_CONTENT_TYPE_NOSNIFF |
False |
SECURE_HSTS_INCLUDE_SUBDOMAINS |
False |
SECURE_HSTS_PRELOAD |
False |
SECURE_HSTS_SECONDS |
0 |
SECURE_PROXY_SSL_HEADER |
None |
SECURE_REDIRECT_EXEMPT |
[] |
SECURE_SSL_HOST |
None |
SECURE_SSL_REDIRECT |
False |
SELECTABLE_PAGE_SIZES |
[20, 50, 100] |
SERVER_EMAIL |
'root@localhost' |
SESSION_CACHE_ALIAS |
'default' |
SESSION_COOKIE_AGE |
1209600 |
SESSION_COOKIE_DOMAIN |
None |
SESSION_COOKIE_HTTPONLY |
True |
SESSION_COOKIE_NAME |
'sessionid' |
SESSION_COOKIE_PATH |
'/' |
SESSION_COOKIE_SAMESITE |
'Lax' |
SESSION_COOKIE_SECURE |
False |
SESSION_ENGINE |
'django.contrib.sessions.backends.db' |
SESSION_EXPIRE_AT_BROWSER_CLOSE |
False |
SESSION_FILE_PATH |
None |
SESSION_SAVE_EVERY_REQUEST |
False |
SESSION_SERIALIZER |
'django.contrib.sessions.serializers.JSONSerializer' |
SETTINGS_MODULE |
'gabaeck.settings_prod' |
SHORT_DATETIME_FORMAT |
'm/d/Y P' |
SHORT_DATE_FORMAT |
'm/d/Y' |
SIGNING_BACKEND |
'django.core.signing.TimestampSigner' |
SILENCED_SYSTEM_CHECKS |
[] |
STATICFILES_DIRS |
[] |
STATICFILES_FINDERS |
['django.contrib.staticfiles.finders.FileSystemFinder', 'django.contrib.staticfiles.finders.AppDirectoriesFinder'] |
STATICFILES_STORAGE |
'django.contrib.staticfiles.storage.StaticFilesStorage' |
STATIC_ROOT |
'/static' |
STATIC_URL |
'/static/' |
TEMPLATES |
[{'APP_DIRS': True, 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [], 'OPTIONS': {'builtins': ['elephant.templatetags.translation'], 'context_processors': ['django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages']}}] |
TEST_NON_SERIALIZED_APPS |
[] |
TEST_RUNNER |
'django.test.runner.DiscoverRunner' |
THOUSAND_SEPARATOR |
',' |
TIME_FORMAT |
'P' |
TIME_INPUT_FORMATS |
['%H:%M:%S', '%H:%M:%S.%f', '%H:%M'] |
TIME_ZONE |
'UTC' |
USE_I18N |
True |
USE_L10N |
False |
USE_THOUSAND_SEPARATOR |
False |
USE_TZ |
False |
USE_X_FORWARDED_HOST |
False |
USE_X_FORWARDED_PORT |
False |
WSGI_APPLICATION |
'gabaeck.wsgi.application' |
X_FRAME_OPTIONS |
'SAMEORIGIN' |
YEAR_MONTH_FORMAT |
'F Y' |
_FORMATTER |
<moneyed.localization.CurrencyFormatter object at 0x7f0ea8734940> |
You're seeing this error because you have DEBUG = True
in your
Django settings file. Change that to False
, and Django will
display a standard page generated by the handler for this status code.