on hitting to the refresh after the plan payment success page #242

Closed
opened 2025-09-09 17:36:53 +03:00 by Faheed · 1 comment
Collaborator

AttributeError at /en/berain-motors/payment-callback/

'NoneType' object has no attribute 'user'

Request Method: GET
Request URL: http://10.10.1.104:8000/en/berain-motors/payment-callback/?id=88c2049e-2805-4338-ba95-600d8fdeb9dd&status=paid&message=APPROVED
Django Version: 5.2.4
Exception Type: AttributeError
Exception Value:

'NoneType' object has no attribute 'user'

Exception Location: /home/haikal/app/inventory/views.py, line 9862, in payment_callback
Raised during: inventory.views.payment_callback
Python Executable: /home/haikal/app/venv/bin/python3
Python Version: 3.11.2
Python Path:

['',
'/home/haikal/app/venv/bin',
'/usr/lib/python311.zip',
'/usr/lib/python3.11',
'/usr/lib/python3.11/lib-dynload',
'/home/haikal/app/venv/lib/python3.11/site-packages']

Server time: Tue, 09 Sep 2025 17:41:00 +0300
Traceback Switch to copy-and-paste view

/home/haikal/app/venv/lib/python3.11/site-packages/django/core/handlers/exception.py, line 42, in inner

                    response = await get_response(request)
                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^

     …
Local vars
	
	

	

	

/home/haikal/app/venv/lib/python3.11/site-packages/django/core/handlers/base.py, line 253, in _get_response_async

                    response = await wrapped_callback(
                                    

     …
Local vars
	
	

	

	

	

	

	

	

	

/home/haikal/app/venv/lib/python3.11/site-packages/django/contrib/auth/decorators.py, line 59, in _view_wrapper

                        return view_func(request, *args, **kwargs)
                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

     …
Local vars
	
	

	

	

	

	

	

	

/home/haikal/app/venv/lib/python3.11/site-packages/django/contrib/auth/decorators.py, line 59, in _view_wrapper

                        return view_func(request, *args, **kwargs)
                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

     …
Local vars
	
	

	

	

	

	

	

	

/home/haikal/app/inventory/views.py, line 9862, in payment_callback

                }

            )

            if created:

                logger.info(f"Created new billing info for user {dealer.user}.")

            else:

                logger.debug(f"Billing info already exists for user {dealer.user}.")

            if not hasattr(order.user, 'userplan'):
                                 ^^^^^^^^^^

     …

                print(order.get_plan_pricing().pricing.period)

                UserPlan.objects.create(

                    user=order.user,

                    plan=order.plan,

                    # expire=datetime.now().date() + timedelta(days=order.get_plan_pricing().pricing.period)

                )

Local vars

Request information
USER

bodekig137@inupup.com
GET
Variable Value
id

'88c2049e-2805-4338-ba95-600d8fdeb9dd'

status

'paid'

message

'APPROVED'

POST

No POST data
FILES

No FILES data
COOKIES
Variable Value
csrftoken

'********************'

sessionid

'********************'

django_language

'en'

META
Variable Value
CSRF_COOKIE

'a6gMSGregiitrZWnLMmaXp8f2VzwFwsL'

HTTP_ACCEPT

'text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8'

HTTP_ACCEPT_ENCODING

'gzip, deflate'

HTTP_ACCEPT_LANGUAGE

'en-US,en;q=0.5'

HTTP_CONNECTION

'keep-alive'

HTTP_COOKIE

'********************'

HTTP_HOST

'10.10.1.104:8000'

HTTP_PRIORITY

'u=0, i'

HTTP_UPGRADE_INSECURE_REQUESTS

'1'

HTTP_USER_AGENT

'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:142.0) Gecko/20100101 Firefox/142.0'

PATH_INFO

'/en/berain-motors/payment-callback/'

QUERY_STRING

'id=88c2049e-2805-4338-ba95-600d8fdeb9dd&status=paid&message=APPROVED'

REMOTE_ADDR

'10.10.1.126'

REMOTE_HOST

'10.10.1.126'

REMOTE_PORT

47672

REQUEST_METHOD

'GET'

SCRIPT_NAME

''

SERVER_NAME

'10.10.1.104'

SERVER_PORT

'8000'

wsgi.multiprocess

True

wsgi.multithread

True

Settings
Using settings module car_inventory.settings
Setting Value
ABSOLUTE_URL_OVERRIDES

{}

ACCOUNT_ACTIVATION_DAYS

0

ACCOUNT_CONFIRM_EMAIL_ON_GET

True

ACCOUNT_EMAIL_CONFIRMATION_EXPIRE_MINUTES

5

ACCOUNT_EMAIL_VERIFICATION

'optional'

ACCOUNT_LOGIN_METHODS

{'email'}

ACCOUNT_LOGIN_ON_EMAIL_CONFIRMATION

True

ACCOUNT_LOGIN_ON_SIGNUP

False

ACCOUNT_LOGOUT_ON_PASSWORD_CHANGE

'********************'

ACCOUNT_SIGNUP_FIELDS

['email*', 'password1*', 'password2*']

ACCOUNT_SIGNUP_REDIRECT_URL

'/'

ACCOUNT_UNIQUE_EMAIL

True

ACCOUNT_USER_MODEL_USERNAME_FIELD

'email'

ADMINS

[]

ALLOWED_HOSTS

['*']

APPEND_SLASH

True

ASGI_APPLICATION

'car_inventory.asgi.application'

AUTHENTICATION_BACKENDS

'********************'

AUTH_PASSWORD_VALIDATORS

'********************'

AUTH_USER_MODEL

'********************'

BACKGROUND_TASK_ASYNC_THREADS

4

BACKGROUND_TASK_PRIORITY_ORDERING

'DESC'

BACKGROUND_TASK_RUN_ASYNC

True

BASE_DIR

PosixPath('/home/haikal/app')

CACHES

{'default': {'BACKEND': 'django.core.cache.backends.locmem.LocMemCache'}}

CACHE_MIDDLEWARE_ALIAS

'default'

CACHE_MIDDLEWARE_KEY_PREFIX

'********************'

CACHE_MIDDLEWARE_SECONDS

600

CAR_API_SECRET

'********************'

CAR_API_TOKEN

'********************'

CHANNEL_LAYERS

{'default': {'BACKEND': 'channels_redis.core.RedisChannelLayer',
'CONFIG': {'channel_layer_kwargs': {'redis_kwargs': {'db': 1}},
'hosts': [('10.10.1.192', '6379')]}}}

CRISPY_ALLOWED_TEMPLATE_PACKS

'bootstrap5'

CRISPY_TEMPLATE_PACK

'bootstrap5'

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

['https://haikal.ai',
'https://*.haikal.ai',
'http://localhost:8000',
'http://127.0.0.1:8000']

CSRF_USE_SESSIONS

False

CSV

<class 'import_export.formats.base_formats.CSV'>

CURRENCY

'﷼'

DATABASES

{'default': {'ATOMIC_REQUESTS': False,
'AUTOCOMMIT': True,
'CONN_HEALTH_CHECKS': False,
'CONN_MAX_AGE': 0,
'ENGINE': 'django.db.backends.postgresql',
'HOST': '10.10.1.119',
'NAME': 'dev_database',
'OPTIONS': {},
'PASSWORD': '********************',
'PORT': '5432',
'TEST': {'CHARSET': None,
'COLLATION': None,
'MIGRATE': True,
'MIRROR': None,
'NAME': None},
'TIME_ZONE': None,
'USER': 'dev_user'}}

DATABASE_ROUTERS

[]

DATA_UPLOAD_MAX_MEMORY_SIZE

2621440

DATA_UPLOAD_MAX_NUMBER_FIELDS

1000

DATA_UPLOAD_MAX_NUMBER_FILES

100

DATETIME_FORMAT

'N j, Y, P'

DATETIME_INPUT_FORMATS

['%Y-%m-%d %H:%M:%S',
'%Y-%m-%d %H:%M:%S.%f',
'%Y-%m-%d %H:%M',
'%m/%d/%Y %H:%M:%S',
'%m/%d/%Y %H:%M:%S.%f',
'%m/%d/%Y %H:%M',
'%m/%d/%y %H:%M:%S',
'%m/%d/%y %H:%M:%S.%f',
'%m/%d/%y %H:%M']

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_AUTO_FIELD

'django.db.models.BigAutoField'

DEFAULT_CHARSET

'utf-8'

DEFAULT_CURRENCY

'SAR'

DEFAULT_EXCEPTION_REPORTER

'django.views.debug.ExceptionReporter'

DEFAULT_EXCEPTION_REPORTER_FILTER

'django.views.debug.SafeExceptionReporterFilter'

DEFAULT_FROM_EMAIL

'haikal@tenhal.sa'

DEFAULT_INDEX_TABLESPACE

''

DEFAULT_TABLESPACE

''

DISALLOWED_USER_AGENTS

[]

DJANGO_LEDGER_ACCOUNT_MODEL

'django_ledger.AccountModel'

DJANGO_LEDGER_CURRENCY_SYMBOL

'SAR '

DJANGO_LEDGER_CUSTOMER_MODEL

'django_ledger.CustomerModel'

DJANGO_LEDGER_ENTITY_MODEL

'django_ledger.EntityModel'

DJANGO_LEDGER_ESTIMATE_MODEL

'django_ledger.EstimateModel'

DJANGO_LEDGER_INVOICE_MODEL

'django_ledger.InvoiceModel'

DJANGO_LEDGER_ITEM_MODEL

'django_ledger.ItemModel'

DJANGO_LEDGER_PDF_SUPPORT_ENABLED

True

DJANGO_LEDGER_VENDOR_MODEL

'django_ledger.VendorModel'

DJANGO_TABLES2_PAGE_RANGE

10

DJANGO_TABLES2_TEMPLATE

'partials/tables.html'

ELM_APP_ID

'c2729afb'

ELM_APP_KEY

'********************'

ELM_CLIENT_ID

'94142c27-2536-47e9-8e28-9ca7728b9442'

EMAIL_BACKEND

'django.core.mail.backends.smtp.EmailBackend'

EMAIL_HOST

'smtp.gmail.com'

EMAIL_HOST_PASSWORD

'********************'

EMAIL_HOST_USER

'haikal@tenhal.sa'

EMAIL_PORT

'587'

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

True

EXPORT_FORMATS

[<class 'import_export.formats.base_formats.CSV'>,
<class 'import_export.formats.base_formats.XLSX'>]

FAKE_SMTP_ALLOW_ALL_RECIPIENTS

True

FIELD_ENCRYPTION_KEY

'********************'

FILE_UPLOAD_DIRECTORY_PERMISSIONS

None

FILE_UPLOAD_HANDLERS

['django.core.files.uploadhandler.MemoryFileUploadHandler',
'django.core.files.uploadhandler.TemporaryFileUploadHandler']

FILE_UPLOAD_MAX_MEMORY_SIZE

104857600

FILE_UPLOAD_PERMISSIONS

420

FILE_UPLOAD_TEMP_DIR

None

FIRST_DAY_OF_WEEK

0

FIXTURE_DIRS

[]

FOOTER_LOGO_PATH

'images/logos/Logo-all.png'

FORCE_SCRIPT_NAME

None

FORMAT_MODULE_PATH

None

FORMS_URLFIELD_ASSUME_HTTPS

False

FORM_RENDERER

'django.forms.renderers.DjangoTemplates'

FPDF

<class 'fpdf.fpdf.FPDF'>

IGNORABLE_404_URLS

[]

IMAGEKIT_CACHEFILE_DIR

'CACHE/images'

IMAGEKIT_CACHEFILE_NAMER

'imagekit.cachefiles.namers.hash'

IMAGEKIT_CACHE_BACKEND

'default'

IMAGEKIT_CACHE_PREFIX

'imagekit:'

IMAGEKIT_CACHE_TIMEOUT

300

IMAGEKIT_DEFAULT_CACHEFILE_BACKEND

'imagekit.cachefiles.backends.Simple'

IMAGEKIT_DEFAULT_CACHEFILE_STRATEGY

'imagekit.cachefiles.strategies.JustInTime'

IMAGEKIT_DEFAULT_FILE_STORAGE

'default'

IMAGEKIT_SPEC_CACHEFILE_NAMER

'imagekit.cachefiles.namers.source_name_as_path'

IMAGEKIT_USE_MEMCACHED_SAFE_CACHE_KEY

'********************'

IMPORT_FORMATS

[<class 'import_export.formats.base_formats.CSV'>,
<class 'import_export.formats.base_formats.XLSX'>]

INSTALLED_APPS

['daphne',
'django.contrib.sites',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.humanize',
'inventory',
'allauth',
'allauth.account',
'allauth.socialaccount',
'allauth.socialaccount.providers.google',
'django_tables2',
'django_bootstrap5',
'crispy_forms',
'crispy_bootstrap5',
'phonenumber_field',
'rest_framework',
'rest_framework.authtoken',
'django_extensions',
'django_ledger',
'haikalbot',
'appointment',
'django_q',
'plans',
'sequences',
'api',
'widget_tweaks',
'schema_graph',
'easyaudit',
'tours',
'channels',
'encrypted_model_fields']

INTERNAL_IPS

['127.0.0.1']

INVOICE_PAST_DUE_REMIND

[3, 7, 14]

LANGUAGES

[('en', 'English'), ('ar', 'Arabic')]

LANGUAGES_BIDI

['he', 'ar', 'ar-dz', 'ckb', 'fa', 'ug', 'ur']

LANGUAGE_CODE

'en'

LANGUAGE_COOKIE_AGE

None

LANGUAGE_COOKIE_DOMAIN

None

LANGUAGE_COOKIE_HTTPONLY

False

LANGUAGE_COOKIE_NAME

'django_language'

LANGUAGE_COOKIE_PATH

'/'

LANGUAGE_COOKIE_SAMESITE

None

LANGUAGE_COOKIE_SECURE

False

LOCALE_PATHS

('/home/haikal/app/locale',)

LOGGING

{'disable_existing_loggers': False,
'formatters': {'simple': {'format': '{levelname} {message}', 'style': '{'},
'verbose': {'format': '{levelname} {asctime} {name} '
'{process:d} {thread:d} {message}',
'style': '{'}},
'handlers': {'console': {'class': 'logging.StreamHandler',
'formatter': 'simple'},
'file': {'backupCount': 5,
'class': 'logging.handlers.RotatingFileHandler',
'filename': '/home/haikal/app/logs/inventory.log',
'formatter': 'verbose',
'maxBytes': 5242880}},
'loggers': {'django': {'handlers': ['console'], 'level': 'INFO'},
'inventory': {'handlers': ['file'],
'level': 'DEBUG',
'propagate': False},
'openai': {'handlers': ['console'], 'level': 'WARNING'}},
'version': 1}

LOGGING_CONFIG

'logging.config.dictConfig'

LOGIN_REDIRECT_URL

'home'

LOGIN_URL

'/accounts/login/'

LOGOUT_REDIRECT_URL

'/'

LOG_DIR

'/home/haikal/app/logs'

MANAGERS

[]

MEDIA_ROOT

'/home/haikal/app/static/images'

MEDIA_URL

'/images/'

MESSAGE_STORAGE

'django.contrib.messages.storage.fallback.FallbackStorage'

MIDDLEWARE

['django_prometheus.middleware.PrometheusBeforeMiddleware',
'django.middleware.security.SecurityMiddleware',
'whitenoise.middleware.WhiteNoiseMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'allauth.account.middleware.AccountMiddleware',
'inventory.middleware.InjectDealerMiddleware',
'inventory.middleware.DealerSlugMiddleware',
'easyaudit.middleware.easyaudit.EasyAuditMiddleware',
'django_prometheus.middleware.PrometheusAfterMiddleware']

MIGRATION_MODULES

{}

MONTH_DAY_FORMAT

'F j'

MOYASAR_PUBLISHABLE_KEY

'********************'

MOYASAR_SECRET_KEY

'********************'

NUMBER_GROUPING

0

OPENAI_API_KEY

'********************'

OPENAI_API_KEY_OLD

'********************'

PASSWORD_HASHERS

'********************'

PASSWORD_RESET_TIMEOUT

'********************'

PLANS_BILLINGINFO_MODEL

'plans.BillingInfo'

PLANS_CURRENCY

'SAR'

PLANS_EXPIRATION_REMIND

[3, 7, 14]

PLANS_INVOICE_ISSUER

{'issuer_city': 'Riyadh',
'issuer_country': 'SA',
'issuer_name': 'Tenhal Information Technology Company',
'issuer_street': '7095 King Faisal',
'issuer_tax_number': '1222233334444555',
'issuer_zipcode': '12613'}

PLANS_INVOICE_MODEL

'plans.Invoice'

PLANS_ORDER_MODEL

'plans.Order'

PLANS_PLANPRICING_MODEL

'plans.PlanPricing'

PLANS_PLANQUOTA_MODEL

'plans.PlanQuota'

PLANS_PLAN_MODEL

'plans.Plan'

PLANS_PRICING_MODEL

'plans.Pricing'

PLANS_QUOTA_MODEL

'plans.Quota'

PLANS_RECURRINGUSERPLAN_MODEL

'plans.RecurringUserPlan'

PLANS_TAX

Decimal('15')

PLANS_TAXATION_POLICY

'inventory.utilities.sa.SaudiTaxationPolicy'

PLANS_TAX_COUNTRY

'SA'

PLANS_USERPLAN_MODEL

'plans.UserPlan'

PLAN_DEFAULT_CURRENCY

'SAR'

PREPEND_WWW

False

PRODUCTION_DOMAIN

'haikal.ai'

Q_CLUSTER

{'compress': True,
'cpu_affinity': 1,
'label': 'Django Q',
'name': 'Hikal',
'queue_limit': 500,
'recycle': 500,
'redis': {'db': 0, 'host': '10.10.1.192', 'port': 6379},
'save_limit': 250,
'timeout': 60,
'workers': 4}

REST_FRAMEWORK

{'DEFAULT_AUTHENTICATION_CLASSES': '********************',
'DEFAULT_PERMISSION_CLASSES': ['rest_framework.permissions.AllowAny']}

ROOT_URLCONF

'car_inventory.urls'

SECRET_KEY

'********************'

SECRET_KEY_FALLBACKS

'********************'

SECURE_CONTENT_TYPE_NOSNIFF

True

SECURE_CROSS_ORIGIN_OPENER_POLICY

'same-origin'

SECURE_HSTS_INCLUDE_SUBDOMAINS

False

SECURE_HSTS_PRELOAD

False

SECURE_HSTS_SECONDS

0

SECURE_PROXY_SSL_HEADER

None

SECURE_REDIRECT_EXEMPT

[]

SECURE_REFERRER_POLICY

'same-origin'

SECURE_SSL_HOST

None

SECURE_SSL_REDIRECT

False

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

'car_inventory.settings'

SHORT_DATETIME_FORMAT

'm/d/Y P'

SHORT_DATE_FORMAT

'm/d/Y'

SIGNING_BACKEND

'django.core.signing.TimestampSigner'

SILENCED_SYSTEM_CHECKS

[]

SITE_DOMAIN

'haikal.ai'

SITE_ID

1

SITE_NAME

'Haikal'

SMS_BACKEND

'sms.backends.twilio.SmsBackend'

STATICFILES_DIRS

[PosixPath('/home/haikal/app/static')]

STATICFILES_FINDERS

['django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder']

STATICFILES_STORAGE

'whitenoise.storage.CompressedManifestStaticFilesStorage'

STATIC_ROOT

'/home/haikal/app/staticfiles'

STATIC_URL

'/static/'

STORAGES

{'default': {'BACKEND': 'django.core.files.storage.FileSystemStorage'},
'staticfiles': {'BACKEND': 'django.contrib.staticfiles.storage.StaticFilesStorage'}}

SUPPORT_EMAIL

'haikal@tenhal.sa'

TEMPLATES

[{'APP_DIRS': True,
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': ['/home/haikal/app/templates'],
'OPTIONS': {'context_processors': ['django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
'inventory.context_processors.currency_context',
'plans.context_processors.account_status'],
'debug': True}}]

TENHAL_IMAGE_GENERATOR_PASSWORD

'********************'

TENHAL_IMAGE_GENERATOR_URL

'http://10.10.1.144:8000'

TENHAL_IMAGE_GENERATOR_USERNAME

'tenhal'

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

'Asia/Riyadh'

TWILIO_ACCOUNT_SID

'AC988fcc2cce8ae4f36ffc58bf897bcb1d'

TWILIO_AUTH_TOKEN

'********************'

USE_I18N

True

USE_L10N

True

USE_THOUSAND_SEPARATOR

False

USE_TZ

True

USE_X_FORWARDED_HOST

False

USE_X_FORWARDED_PORT

False

WSGI_APPLICATION

'car_inventory.wsgi.application'

XLSX

<class 'import_export.formats.base_formats.XLSX'>

X_FRAME_OPTIONS

'DENY'

YEAR_MONTH_FORMAT

'F Y'

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.

AttributeError at /en/berain-motors/payment-callback/ 'NoneType' object has no attribute 'user' Request Method: GET Request URL: http://10.10.1.104:8000/en/berain-motors/payment-callback/?id=88c2049e-2805-4338-ba95-600d8fdeb9dd&status=paid&message=APPROVED Django Version: 5.2.4 Exception Type: AttributeError Exception Value: 'NoneType' object has no attribute 'user' Exception Location: /home/haikal/app/inventory/views.py, line 9862, in payment_callback Raised during: inventory.views.payment_callback Python Executable: /home/haikal/app/venv/bin/python3 Python Version: 3.11.2 Python Path: ['', '/home/haikal/app/venv/bin', '/usr/lib/python311.zip', '/usr/lib/python3.11', '/usr/lib/python3.11/lib-dynload', '/home/haikal/app/venv/lib/python3.11/site-packages'] Server time: Tue, 09 Sep 2025 17:41:00 +0300 Traceback Switch to copy-and-paste view /home/haikal/app/venv/lib/python3.11/site-packages/django/core/handlers/exception.py, line 42, in inner response = await get_response(request) ^^^^^^^^^^^^^^^^^^^^^^^^^^^ … Local vars /home/haikal/app/venv/lib/python3.11/site-packages/django/core/handlers/base.py, line 253, in _get_response_async response = await wrapped_callback( … Local vars /home/haikal/app/venv/lib/python3.11/site-packages/django/contrib/auth/decorators.py, line 59, in _view_wrapper return view_func(request, *args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ … Local vars /home/haikal/app/venv/lib/python3.11/site-packages/django/contrib/auth/decorators.py, line 59, in _view_wrapper return view_func(request, *args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ … Local vars /home/haikal/app/inventory/views.py, line 9862, in payment_callback } ) if created: logger.info(f"Created new billing info for user {dealer.user}.") else: logger.debug(f"Billing info already exists for user {dealer.user}.") if not hasattr(order.user, 'userplan'): ^^^^^^^^^^ … print(order.get_plan_pricing().pricing.period) UserPlan.objects.create( user=order.user, plan=order.plan, # expire=datetime.now().date() + timedelta(days=order.get_plan_pricing().pricing.period) ) Local vars Request information USER bodekig137@inupup.com GET Variable Value id '88c2049e-2805-4338-ba95-600d8fdeb9dd' status 'paid' message 'APPROVED' POST No POST data FILES No FILES data COOKIES Variable Value csrftoken '********************' sessionid '********************' django_language 'en' META Variable Value CSRF_COOKIE 'a6gMSGregiitrZWnLMmaXp8f2VzwFwsL' HTTP_ACCEPT 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' HTTP_ACCEPT_ENCODING 'gzip, deflate' HTTP_ACCEPT_LANGUAGE 'en-US,en;q=0.5' HTTP_CONNECTION 'keep-alive' HTTP_COOKIE '********************' HTTP_HOST '10.10.1.104:8000' HTTP_PRIORITY 'u=0, i' HTTP_UPGRADE_INSECURE_REQUESTS '1' HTTP_USER_AGENT 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:142.0) Gecko/20100101 Firefox/142.0' PATH_INFO '/en/berain-motors/payment-callback/' QUERY_STRING 'id=88c2049e-2805-4338-ba95-600d8fdeb9dd&status=paid&message=APPROVED' REMOTE_ADDR '10.10.1.126' REMOTE_HOST '10.10.1.126' REMOTE_PORT 47672 REQUEST_METHOD 'GET' SCRIPT_NAME '' SERVER_NAME '10.10.1.104' SERVER_PORT '8000' wsgi.multiprocess True wsgi.multithread True Settings Using settings module car_inventory.settings Setting Value ABSOLUTE_URL_OVERRIDES {} ACCOUNT_ACTIVATION_DAYS 0 ACCOUNT_CONFIRM_EMAIL_ON_GET True ACCOUNT_EMAIL_CONFIRMATION_EXPIRE_MINUTES 5 ACCOUNT_EMAIL_VERIFICATION 'optional' ACCOUNT_LOGIN_METHODS {'email'} ACCOUNT_LOGIN_ON_EMAIL_CONFIRMATION True ACCOUNT_LOGIN_ON_SIGNUP False ACCOUNT_LOGOUT_ON_PASSWORD_CHANGE '********************' ACCOUNT_SIGNUP_FIELDS ['email*', 'password1*', 'password2*'] ACCOUNT_SIGNUP_REDIRECT_URL '/' ACCOUNT_UNIQUE_EMAIL True ACCOUNT_USER_MODEL_USERNAME_FIELD 'email' ADMINS [] ALLOWED_HOSTS ['*'] APPEND_SLASH True ASGI_APPLICATION 'car_inventory.asgi.application' AUTHENTICATION_BACKENDS '********************' AUTH_PASSWORD_VALIDATORS '********************' AUTH_USER_MODEL '********************' BACKGROUND_TASK_ASYNC_THREADS 4 BACKGROUND_TASK_PRIORITY_ORDERING 'DESC' BACKGROUND_TASK_RUN_ASYNC True BASE_DIR PosixPath('/home/haikal/app') CACHES {'default': {'BACKEND': 'django.core.cache.backends.locmem.LocMemCache'}} CACHE_MIDDLEWARE_ALIAS 'default' CACHE_MIDDLEWARE_KEY_PREFIX '********************' CACHE_MIDDLEWARE_SECONDS 600 CAR_API_SECRET '********************' CAR_API_TOKEN '********************' CHANNEL_LAYERS {'default': {'BACKEND': 'channels_redis.core.RedisChannelLayer', 'CONFIG': {'channel_layer_kwargs': {'redis_kwargs': {'db': 1}}, 'hosts': [('10.10.1.192', '6379')]}}} CRISPY_ALLOWED_TEMPLATE_PACKS 'bootstrap5' CRISPY_TEMPLATE_PACK 'bootstrap5' 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 ['https://haikal.ai', 'https://*.haikal.ai', 'http://localhost:8000', 'http://127.0.0.1:8000'] CSRF_USE_SESSIONS False CSV <class 'import_export.formats.base_formats.CSV'> CURRENCY '﷼' DATABASES {'default': {'ATOMIC_REQUESTS': False, 'AUTOCOMMIT': True, 'CONN_HEALTH_CHECKS': False, 'CONN_MAX_AGE': 0, 'ENGINE': 'django.db.backends.postgresql', 'HOST': '10.10.1.119', 'NAME': 'dev_database', 'OPTIONS': {}, 'PASSWORD': '********************', 'PORT': '5432', 'TEST': {'CHARSET': None, 'COLLATION': None, 'MIGRATE': True, 'MIRROR': None, 'NAME': None}, 'TIME_ZONE': None, 'USER': 'dev_user'}} DATABASE_ROUTERS [] DATA_UPLOAD_MAX_MEMORY_SIZE 2621440 DATA_UPLOAD_MAX_NUMBER_FIELDS 1000 DATA_UPLOAD_MAX_NUMBER_FILES 100 DATETIME_FORMAT 'N j, Y, P' DATETIME_INPUT_FORMATS ['%Y-%m-%d %H:%M:%S', '%Y-%m-%d %H:%M:%S.%f', '%Y-%m-%d %H:%M', '%m/%d/%Y %H:%M:%S', '%m/%d/%Y %H:%M:%S.%f', '%m/%d/%Y %H:%M', '%m/%d/%y %H:%M:%S', '%m/%d/%y %H:%M:%S.%f', '%m/%d/%y %H:%M'] 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_AUTO_FIELD 'django.db.models.BigAutoField' DEFAULT_CHARSET 'utf-8' DEFAULT_CURRENCY 'SAR' DEFAULT_EXCEPTION_REPORTER 'django.views.debug.ExceptionReporter' DEFAULT_EXCEPTION_REPORTER_FILTER 'django.views.debug.SafeExceptionReporterFilter' DEFAULT_FROM_EMAIL 'haikal@tenhal.sa' DEFAULT_INDEX_TABLESPACE '' DEFAULT_TABLESPACE '' DISALLOWED_USER_AGENTS [] DJANGO_LEDGER_ACCOUNT_MODEL 'django_ledger.AccountModel' DJANGO_LEDGER_CURRENCY_SYMBOL 'SAR ' DJANGO_LEDGER_CUSTOMER_MODEL 'django_ledger.CustomerModel' DJANGO_LEDGER_ENTITY_MODEL 'django_ledger.EntityModel' DJANGO_LEDGER_ESTIMATE_MODEL 'django_ledger.EstimateModel' DJANGO_LEDGER_INVOICE_MODEL 'django_ledger.InvoiceModel' DJANGO_LEDGER_ITEM_MODEL 'django_ledger.ItemModel' DJANGO_LEDGER_PDF_SUPPORT_ENABLED True DJANGO_LEDGER_VENDOR_MODEL 'django_ledger.VendorModel' DJANGO_TABLES2_PAGE_RANGE 10 DJANGO_TABLES2_TEMPLATE 'partials/tables.html' ELM_APP_ID 'c2729afb' ELM_APP_KEY '********************' ELM_CLIENT_ID '94142c27-2536-47e9-8e28-9ca7728b9442' EMAIL_BACKEND 'django.core.mail.backends.smtp.EmailBackend' EMAIL_HOST 'smtp.gmail.com' EMAIL_HOST_PASSWORD '********************' EMAIL_HOST_USER 'haikal@tenhal.sa' EMAIL_PORT '587' 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 True EXPORT_FORMATS [<class 'import_export.formats.base_formats.CSV'>, <class 'import_export.formats.base_formats.XLSX'>] FAKE_SMTP_ALLOW_ALL_RECIPIENTS True FIELD_ENCRYPTION_KEY '********************' FILE_UPLOAD_DIRECTORY_PERMISSIONS None FILE_UPLOAD_HANDLERS ['django.core.files.uploadhandler.MemoryFileUploadHandler', 'django.core.files.uploadhandler.TemporaryFileUploadHandler'] FILE_UPLOAD_MAX_MEMORY_SIZE 104857600 FILE_UPLOAD_PERMISSIONS 420 FILE_UPLOAD_TEMP_DIR None FIRST_DAY_OF_WEEK 0 FIXTURE_DIRS [] FOOTER_LOGO_PATH 'images/logos/Logo-all.png' FORCE_SCRIPT_NAME None FORMAT_MODULE_PATH None FORMS_URLFIELD_ASSUME_HTTPS False FORM_RENDERER 'django.forms.renderers.DjangoTemplates' FPDF <class 'fpdf.fpdf.FPDF'> IGNORABLE_404_URLS [] IMAGEKIT_CACHEFILE_DIR 'CACHE/images' IMAGEKIT_CACHEFILE_NAMER 'imagekit.cachefiles.namers.hash' IMAGEKIT_CACHE_BACKEND 'default' IMAGEKIT_CACHE_PREFIX 'imagekit:' IMAGEKIT_CACHE_TIMEOUT 300 IMAGEKIT_DEFAULT_CACHEFILE_BACKEND 'imagekit.cachefiles.backends.Simple' IMAGEKIT_DEFAULT_CACHEFILE_STRATEGY 'imagekit.cachefiles.strategies.JustInTime' IMAGEKIT_DEFAULT_FILE_STORAGE 'default' IMAGEKIT_SPEC_CACHEFILE_NAMER 'imagekit.cachefiles.namers.source_name_as_path' IMAGEKIT_USE_MEMCACHED_SAFE_CACHE_KEY '********************' IMPORT_FORMATS [<class 'import_export.formats.base_formats.CSV'>, <class 'import_export.formats.base_formats.XLSX'>] INSTALLED_APPS ['daphne', 'django.contrib.sites', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'django.contrib.humanize', 'inventory', 'allauth', 'allauth.account', 'allauth.socialaccount', 'allauth.socialaccount.providers.google', 'django_tables2', 'django_bootstrap5', 'crispy_forms', 'crispy_bootstrap5', 'phonenumber_field', 'rest_framework', 'rest_framework.authtoken', 'django_extensions', 'django_ledger', 'haikalbot', 'appointment', 'django_q', 'plans', 'sequences', 'api', 'widget_tweaks', 'schema_graph', 'easyaudit', 'tours', 'channels', 'encrypted_model_fields'] INTERNAL_IPS ['127.0.0.1'] INVOICE_PAST_DUE_REMIND [3, 7, 14] LANGUAGES [('en', 'English'), ('ar', 'Arabic')] LANGUAGES_BIDI ['he', 'ar', 'ar-dz', 'ckb', 'fa', 'ug', 'ur'] LANGUAGE_CODE 'en' LANGUAGE_COOKIE_AGE None LANGUAGE_COOKIE_DOMAIN None LANGUAGE_COOKIE_HTTPONLY False LANGUAGE_COOKIE_NAME 'django_language' LANGUAGE_COOKIE_PATH '/' LANGUAGE_COOKIE_SAMESITE None LANGUAGE_COOKIE_SECURE False LOCALE_PATHS ('/home/haikal/app/locale',) LOGGING {'disable_existing_loggers': False, 'formatters': {'simple': {'format': '{levelname} {message}', 'style': '{'}, 'verbose': {'format': '{levelname} {asctime} {name} ' '{process:d} {thread:d} {message}', 'style': '{'}}, 'handlers': {'console': {'class': 'logging.StreamHandler', 'formatter': 'simple'}, 'file': {'backupCount': 5, 'class': 'logging.handlers.RotatingFileHandler', 'filename': '/home/haikal/app/logs/inventory.log', 'formatter': 'verbose', 'maxBytes': 5242880}}, 'loggers': {'django': {'handlers': ['console'], 'level': 'INFO'}, 'inventory': {'handlers': ['file'], 'level': 'DEBUG', 'propagate': False}, 'openai': {'handlers': ['console'], 'level': 'WARNING'}}, 'version': 1} LOGGING_CONFIG 'logging.config.dictConfig' LOGIN_REDIRECT_URL 'home' LOGIN_URL '/accounts/login/' LOGOUT_REDIRECT_URL '/' LOG_DIR '/home/haikal/app/logs' MANAGERS [] MEDIA_ROOT '/home/haikal/app/static/images' MEDIA_URL '/images/' MESSAGE_STORAGE 'django.contrib.messages.storage.fallback.FallbackStorage' MIDDLEWARE ['django_prometheus.middleware.PrometheusBeforeMiddleware', 'django.middleware.security.SecurityMiddleware', 'whitenoise.middleware.WhiteNoiseMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.locale.LocaleMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'allauth.account.middleware.AccountMiddleware', 'inventory.middleware.InjectDealerMiddleware', 'inventory.middleware.DealerSlugMiddleware', 'easyaudit.middleware.easyaudit.EasyAuditMiddleware', 'django_prometheus.middleware.PrometheusAfterMiddleware'] MIGRATION_MODULES {} MONTH_DAY_FORMAT 'F j' MOYASAR_PUBLISHABLE_KEY '********************' MOYASAR_SECRET_KEY '********************' NUMBER_GROUPING 0 OPENAI_API_KEY '********************' OPENAI_API_KEY_OLD '********************' PASSWORD_HASHERS '********************' PASSWORD_RESET_TIMEOUT '********************' PLANS_BILLINGINFO_MODEL 'plans.BillingInfo' PLANS_CURRENCY 'SAR' PLANS_EXPIRATION_REMIND [3, 7, 14] PLANS_INVOICE_ISSUER {'issuer_city': 'Riyadh', 'issuer_country': 'SA', 'issuer_name': 'Tenhal Information Technology Company', 'issuer_street': '7095 King Faisal', 'issuer_tax_number': '1222233334444555', 'issuer_zipcode': '12613'} PLANS_INVOICE_MODEL 'plans.Invoice' PLANS_ORDER_MODEL 'plans.Order' PLANS_PLANPRICING_MODEL 'plans.PlanPricing' PLANS_PLANQUOTA_MODEL 'plans.PlanQuota' PLANS_PLAN_MODEL 'plans.Plan' PLANS_PRICING_MODEL 'plans.Pricing' PLANS_QUOTA_MODEL 'plans.Quota' PLANS_RECURRINGUSERPLAN_MODEL 'plans.RecurringUserPlan' PLANS_TAX Decimal('15') PLANS_TAXATION_POLICY 'inventory.utilities.sa.SaudiTaxationPolicy' PLANS_TAX_COUNTRY 'SA' PLANS_USERPLAN_MODEL 'plans.UserPlan' PLAN_DEFAULT_CURRENCY 'SAR' PREPEND_WWW False PRODUCTION_DOMAIN 'haikal.ai' Q_CLUSTER {'compress': True, 'cpu_affinity': 1, 'label': 'Django Q', 'name': 'Hikal', 'queue_limit': 500, 'recycle': 500, 'redis': {'db': 0, 'host': '10.10.1.192', 'port': 6379}, 'save_limit': 250, 'timeout': 60, 'workers': 4} REST_FRAMEWORK {'DEFAULT_AUTHENTICATION_CLASSES': '********************', 'DEFAULT_PERMISSION_CLASSES': ['rest_framework.permissions.AllowAny']} ROOT_URLCONF 'car_inventory.urls' SECRET_KEY '********************' SECRET_KEY_FALLBACKS '********************' SECURE_CONTENT_TYPE_NOSNIFF True SECURE_CROSS_ORIGIN_OPENER_POLICY 'same-origin' SECURE_HSTS_INCLUDE_SUBDOMAINS False SECURE_HSTS_PRELOAD False SECURE_HSTS_SECONDS 0 SECURE_PROXY_SSL_HEADER None SECURE_REDIRECT_EXEMPT [] SECURE_REFERRER_POLICY 'same-origin' SECURE_SSL_HOST None SECURE_SSL_REDIRECT False 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 'car_inventory.settings' SHORT_DATETIME_FORMAT 'm/d/Y P' SHORT_DATE_FORMAT 'm/d/Y' SIGNING_BACKEND 'django.core.signing.TimestampSigner' SILENCED_SYSTEM_CHECKS [] SITE_DOMAIN 'haikal.ai' SITE_ID 1 SITE_NAME 'Haikal' SMS_BACKEND 'sms.backends.twilio.SmsBackend' STATICFILES_DIRS [PosixPath('/home/haikal/app/static')] STATICFILES_FINDERS ['django.contrib.staticfiles.finders.FileSystemFinder', 'django.contrib.staticfiles.finders.AppDirectoriesFinder'] STATICFILES_STORAGE 'whitenoise.storage.CompressedManifestStaticFilesStorage' STATIC_ROOT '/home/haikal/app/staticfiles' STATIC_URL '/static/' STORAGES {'default': {'BACKEND': 'django.core.files.storage.FileSystemStorage'}, 'staticfiles': {'BACKEND': 'django.contrib.staticfiles.storage.StaticFilesStorage'}} SUPPORT_EMAIL 'haikal@tenhal.sa' TEMPLATES [{'APP_DIRS': True, 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': ['/home/haikal/app/templates'], 'OPTIONS': {'context_processors': ['django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', 'inventory.context_processors.currency_context', 'plans.context_processors.account_status'], 'debug': True}}] TENHAL_IMAGE_GENERATOR_PASSWORD '********************' TENHAL_IMAGE_GENERATOR_URL 'http://10.10.1.144:8000' TENHAL_IMAGE_GENERATOR_USERNAME 'tenhal' 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 'Asia/Riyadh' TWILIO_ACCOUNT_SID 'AC988fcc2cce8ae4f36ffc58bf897bcb1d' TWILIO_AUTH_TOKEN '********************' USE_I18N True USE_L10N True USE_THOUSAND_SEPARATOR False USE_TZ True USE_X_FORWARDED_HOST False USE_X_FORWARDED_PORT False WSGI_APPLICATION 'car_inventory.wsgi.application' XLSX <class 'import_export.formats.base_formats.XLSX'> X_FRAME_OPTIONS 'DENY' YEAR_MONTH_FORMAT 'F Y' 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.
Author
Collaborator

AttributeError at /en/berain-motors/payment-callback/

'NoneType' object has no attribute 'user'

Request Method: GET
Request URL: http://10.10.1.104:8000/en/berain-motors/payment-callback/?id=88c2049e-2805-4338-ba95-600d8fdeb9dd&status=paid&message=APPROVED
Django Version: 5.2.4
Exception Type: AttributeError
Exception Value:

'NoneType' object has no attribute 'user'

Exception Location: /home/haikal/app/inventory/views.py, line 9862, in payment_callback
Raised during: inventory.views.payment_callback
Python Executable: /home/haikal/app/venv/bin/python3
Python Version: 3.11.2
Python Path:

['',
'/home/haikal/app/venv/bin',
'/usr/lib/python311.zip',
'/usr/lib/python3.11',
'/usr/lib/python3.11/lib-dynload',
'/home/haikal/app/venv/lib/python3.11/site-packages']

Server time: Tue, 09 Sep 2025 17:41:00 +0300
Traceback Switch to copy-and-paste view

/home/haikal/app/venv/lib/python3.11/site-packages/django/core/handlers/exception.py, line 42, in inner

                    response = await get_response(request)
                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^

     …
Local vars
	
	

	

	

/home/haikal/app/venv/lib/python3.11/site-packages/django/core/handlers/base.py, line 253, in _get_response_async

                    response = await wrapped_callback(
                                    

     …
Local vars
	
	

	

	

	

	

	

	

	

/home/haikal/app/venv/lib/python3.11/site-packages/django/contrib/auth/decorators.py, line 59, in _view_wrapper

                        return view_func(request, *args, **kwargs)
                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

     …
Local vars
	
	

	

	

	

	

	

	

/home/haikal/app/venv/lib/python3.11/site-packages/django/contrib/auth/decorators.py, line 59, in _view_wrapper

                        return view_func(request, *args, **kwargs)
                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

     …
Local vars
	
	

	

	

	

	

	

	

/home/haikal/app/inventory/views.py, line 9862, in payment_callback

                }

            )

            if created:

                logger.info(f"Created new billing info for user {dealer.user}.")

            else:

                logger.debug(f"Billing info already exists for user {dealer.user}.")

            if not hasattr(order.user, 'userplan'):
                                 ^^^^^^^^^^

     …

                print(order.get_plan_pricing().pricing.period)

                UserPlan.objects.create(

                    user=order.user,

                    plan=order.plan,

                    # expire=datetime.now().date() + timedelta(days=order.get_plan_pricing().pricing.period)

                )

Local vars

Request information
USER

bodekig137@inupup.com
GET
Variable Value
id

'88c2049e-2805-4338-ba95-600d8fdeb9dd'

status

'paid'

message

'APPROVED'

POST

No POST data
FILES

No FILES data
COOKIES
Variable Value
csrftoken

'********************'

sessionid

'********************'

django_language

'en'

META
Variable Value
CSRF_COOKIE

'a6gMSGregiitrZWnLMmaXp8f2VzwFwsL'

HTTP_ACCEPT

'text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8'

HTTP_ACCEPT_ENCODING

'gzip, deflate'

HTTP_ACCEPT_LANGUAGE

'en-US,en;q=0.5'

HTTP_CONNECTION

'keep-alive'

HTTP_COOKIE

'********************'

HTTP_HOST

'10.10.1.104:8000'

HTTP_PRIORITY

'u=0, i'

HTTP_UPGRADE_INSECURE_REQUESTS

'1'

HTTP_USER_AGENT

'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:142.0) Gecko/20100101 Firefox/142.0'

PATH_INFO

'/en/berain-motors/payment-callback/'

QUERY_STRING

'id=88c2049e-2805-4338-ba95-600d8fdeb9dd&status=paid&message=APPROVED'

REMOTE_ADDR

'10.10.1.126'

REMOTE_HOST

'10.10.1.126'

REMOTE_PORT

47672

REQUEST_METHOD

'GET'

SCRIPT_NAME

''

SERVER_NAME

'10.10.1.104'

SERVER_PORT

'8000'

wsgi.multiprocess

True

wsgi.multithread

True

Settings
Using settings module car_inventory.settings
Setting Value
ABSOLUTE_URL_OVERRIDES

{}

ACCOUNT_ACTIVATION_DAYS

0

ACCOUNT_CONFIRM_EMAIL_ON_GET

True

ACCOUNT_EMAIL_CONFIRMATION_EXPIRE_MINUTES

5

ACCOUNT_EMAIL_VERIFICATION

'optional'

ACCOUNT_LOGIN_METHODS

{'email'}

ACCOUNT_LOGIN_ON_EMAIL_CONFIRMATION

True

ACCOUNT_LOGIN_ON_SIGNUP

False

ACCOUNT_LOGOUT_ON_PASSWORD_CHANGE

'********************'

ACCOUNT_SIGNUP_FIELDS

['email*', 'password1*', 'password2*']

ACCOUNT_SIGNUP_REDIRECT_URL

'/'

ACCOUNT_UNIQUE_EMAIL

True

ACCOUNT_USER_MODEL_USERNAME_FIELD

'email'

ADMINS

[]

ALLOWED_HOSTS

['*']

APPEND_SLASH

True

ASGI_APPLICATION

'car_inventory.asgi.application'

AUTHENTICATION_BACKENDS

'********************'

AUTH_PASSWORD_VALIDATORS

'********************'

AUTH_USER_MODEL

'********************'

BACKGROUND_TASK_ASYNC_THREADS

4

BACKGROUND_TASK_PRIORITY_ORDERING

'DESC'

BACKGROUND_TASK_RUN_ASYNC

True

BASE_DIR

PosixPath('/home/haikal/app')

CACHES

{'default': {'BACKEND': 'django.core.cache.backends.locmem.LocMemCache'}}

CACHE_MIDDLEWARE_ALIAS

'default'

CACHE_MIDDLEWARE_KEY_PREFIX

'********************'

CACHE_MIDDLEWARE_SECONDS

600

CAR_API_SECRET

'********************'

CAR_API_TOKEN

'********************'

CHANNEL_LAYERS

{'default': {'BACKEND': 'channels_redis.core.RedisChannelLayer',
'CONFIG': {'channel_layer_kwargs': {'redis_kwargs': {'db': 1}},
'hosts': [('10.10.1.192', '6379')]}}}

CRISPY_ALLOWED_TEMPLATE_PACKS

'bootstrap5'

CRISPY_TEMPLATE_PACK

'bootstrap5'

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

['https://haikal.ai',
'https://*.haikal.ai',
'http://localhost:8000',
'http://127.0.0.1:8000']

CSRF_USE_SESSIONS

False

CSV

<class 'import_export.formats.base_formats.CSV'>

CURRENCY

'﷼'

DATABASES

{'default': {'ATOMIC_REQUESTS': False,
'AUTOCOMMIT': True,
'CONN_HEALTH_CHECKS': False,
'CONN_MAX_AGE': 0,
'ENGINE': 'django.db.backends.postgresql',
'HOST': '10.10.1.119',
'NAME': 'dev_database',
'OPTIONS': {},
'PASSWORD': '********************',
'PORT': '5432',
'TEST': {'CHARSET': None,
'COLLATION': None,
'MIGRATE': True,
'MIRROR': None,
'NAME': None},
'TIME_ZONE': None,
'USER': 'dev_user'}}

DATABASE_ROUTERS

[]

DATA_UPLOAD_MAX_MEMORY_SIZE

2621440

DATA_UPLOAD_MAX_NUMBER_FIELDS

1000

DATA_UPLOAD_MAX_NUMBER_FILES

100

DATETIME_FORMAT

'N j, Y, P'

DATETIME_INPUT_FORMATS

['%Y-%m-%d %H:%M:%S',
'%Y-%m-%d %H:%M:%S.%f',
'%Y-%m-%d %H:%M',
'%m/%d/%Y %H:%M:%S',
'%m/%d/%Y %H:%M:%S.%f',
'%m/%d/%Y %H:%M',
'%m/%d/%y %H:%M:%S',
'%m/%d/%y %H:%M:%S.%f',
'%m/%d/%y %H:%M']

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_AUTO_FIELD

'django.db.models.BigAutoField'

DEFAULT_CHARSET

'utf-8'

DEFAULT_CURRENCY

'SAR'

DEFAULT_EXCEPTION_REPORTER

'django.views.debug.ExceptionReporter'

DEFAULT_EXCEPTION_REPORTER_FILTER

'django.views.debug.SafeExceptionReporterFilter'

DEFAULT_FROM_EMAIL

'haikal@tenhal.sa'

DEFAULT_INDEX_TABLESPACE

''

DEFAULT_TABLESPACE

''

DISALLOWED_USER_AGENTS

[]

DJANGO_LEDGER_ACCOUNT_MODEL

'django_ledger.AccountModel'

DJANGO_LEDGER_CURRENCY_SYMBOL

'SAR '

DJANGO_LEDGER_CUSTOMER_MODEL

'django_ledger.CustomerModel'

DJANGO_LEDGER_ENTITY_MODEL

'django_ledger.EntityModel'

DJANGO_LEDGER_ESTIMATE_MODEL

'django_ledger.EstimateModel'

DJANGO_LEDGER_INVOICE_MODEL

'django_ledger.InvoiceModel'

DJANGO_LEDGER_ITEM_MODEL

'django_ledger.ItemModel'

DJANGO_LEDGER_PDF_SUPPORT_ENABLED

True

DJANGO_LEDGER_VENDOR_MODEL

'django_ledger.VendorModel'

DJANGO_TABLES2_PAGE_RANGE

10

DJANGO_TABLES2_TEMPLATE

'partials/tables.html'

ELM_APP_ID

'c2729afb'

ELM_APP_KEY

'********************'

ELM_CLIENT_ID

'94142c27-2536-47e9-8e28-9ca7728b9442'

EMAIL_BACKEND

'django.core.mail.backends.smtp.EmailBackend'

EMAIL_HOST

'smtp.gmail.com'

EMAIL_HOST_PASSWORD

'********************'

EMAIL_HOST_USER

'haikal@tenhal.sa'

EMAIL_PORT

'587'

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

True

EXPORT_FORMATS

[<class 'import_export.formats.base_formats.CSV'>,
<class 'import_export.formats.base_formats.XLSX'>]

FAKE_SMTP_ALLOW_ALL_RECIPIENTS

True

FIELD_ENCRYPTION_KEY

'********************'

FILE_UPLOAD_DIRECTORY_PERMISSIONS

None

FILE_UPLOAD_HANDLERS

['django.core.files.uploadhandler.MemoryFileUploadHandler',
'django.core.files.uploadhandler.TemporaryFileUploadHandler']

FILE_UPLOAD_MAX_MEMORY_SIZE

104857600

FILE_UPLOAD_PERMISSIONS

420

FILE_UPLOAD_TEMP_DIR

None

FIRST_DAY_OF_WEEK

0

FIXTURE_DIRS

[]

FOOTER_LOGO_PATH

'images/logos/Logo-all.png'

FORCE_SCRIPT_NAME

None

FORMAT_MODULE_PATH

None

FORMS_URLFIELD_ASSUME_HTTPS

False

FORM_RENDERER

'django.forms.renderers.DjangoTemplates'

FPDF

<class 'fpdf.fpdf.FPDF'>

IGNORABLE_404_URLS

[]

IMAGEKIT_CACHEFILE_DIR

'CACHE/images'

IMAGEKIT_CACHEFILE_NAMER

'imagekit.cachefiles.namers.hash'

IMAGEKIT_CACHE_BACKEND

'default'

IMAGEKIT_CACHE_PREFIX

'imagekit:'

IMAGEKIT_CACHE_TIMEOUT

300

IMAGEKIT_DEFAULT_CACHEFILE_BACKEND

'imagekit.cachefiles.backends.Simple'

IMAGEKIT_DEFAULT_CACHEFILE_STRATEGY

'imagekit.cachefiles.strategies.JustInTime'

IMAGEKIT_DEFAULT_FILE_STORAGE

'default'

IMAGEKIT_SPEC_CACHEFILE_NAMER

'imagekit.cachefiles.namers.source_name_as_path'

IMAGEKIT_USE_MEMCACHED_SAFE_CACHE_KEY

'********************'

IMPORT_FORMATS

[<class 'import_export.formats.base_formats.CSV'>,
<class 'import_export.formats.base_formats.XLSX'>]

INSTALLED_APPS

['daphne',
'django.contrib.sites',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.humanize',
'inventory',
'allauth',
'allauth.account',
'allauth.socialaccount',
'allauth.socialaccount.providers.google',
'django_tables2',
'django_bootstrap5',
'crispy_forms',
'crispy_bootstrap5',
'phonenumber_field',
'rest_framework',
'rest_framework.authtoken',
'django_extensions',
'django_ledger',
'haikalbot',
'appointment',
'django_q',
'plans',
'sequences',
'api',
'widget_tweaks',
'schema_graph',
'easyaudit',
'tours',
'channels',
'encrypted_model_fields']

INTERNAL_IPS

['127.0.0.1']

INVOICE_PAST_DUE_REMIND

[3, 7, 14]

LANGUAGES

[('en', 'English'), ('ar', 'Arabic')]

LANGUAGES_BIDI

['he', 'ar', 'ar-dz', 'ckb', 'fa', 'ug', 'ur']

LANGUAGE_CODE

'en'

LANGUAGE_COOKIE_AGE

None

LANGUAGE_COOKIE_DOMAIN

None

LANGUAGE_COOKIE_HTTPONLY

False

LANGUAGE_COOKIE_NAME

'django_language'

LANGUAGE_COOKIE_PATH

'/'

LANGUAGE_COOKIE_SAMESITE

None

LANGUAGE_COOKIE_SECURE

False

LOCALE_PATHS

('/home/haikal/app/locale',)

LOGGING

{'disable_existing_loggers': False,
'formatters': {'simple': {'format': '{levelname} {message}', 'style': '{'},
'verbose': {'format': '{levelname} {asctime} {name} '
'{process:d} {thread:d} {message}',
'style': '{'}},
'handlers': {'console': {'class': 'logging.StreamHandler',
'formatter': 'simple'},
'file': {'backupCount': 5,
'class': 'logging.handlers.RotatingFileHandler',
'filename': '/home/haikal/app/logs/inventory.log',
'formatter': 'verbose',
'maxBytes': 5242880}},
'loggers': {'django': {'handlers': ['console'], 'level': 'INFO'},
'inventory': {'handlers': ['file'],
'level': 'DEBUG',
'propagate': False},
'openai': {'handlers': ['console'], 'level': 'WARNING'}},
'version': 1}

LOGGING_CONFIG

'logging.config.dictConfig'

LOGIN_REDIRECT_URL

'home'

LOGIN_URL

'/accounts/login/'

LOGOUT_REDIRECT_URL

'/'

LOG_DIR

'/home/haikal/app/logs'

MANAGERS

[]

MEDIA_ROOT

'/home/haikal/app/static/images'

MEDIA_URL

'/images/'

MESSAGE_STORAGE

'django.contrib.messages.storage.fallback.FallbackStorage'

MIDDLEWARE

['django_prometheus.middleware.PrometheusBeforeMiddleware',
'django.middleware.security.SecurityMiddleware',
'whitenoise.middleware.WhiteNoiseMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'allauth.account.middleware.AccountMiddleware',
'inventory.middleware.InjectDealerMiddleware',
'inventory.middleware.DealerSlugMiddleware',
'easyaudit.middleware.easyaudit.EasyAuditMiddleware',
'django_prometheus.middleware.PrometheusAfterMiddleware']

MIGRATION_MODULES

{}

MONTH_DAY_FORMAT

'F j'

MOYASAR_PUBLISHABLE_KEY

'********************'

MOYASAR_SECRET_KEY

'********************'

NUMBER_GROUPING

0

OPENAI_API_KEY

'********************'

OPENAI_API_KEY_OLD

'********************'

PASSWORD_HASHERS

'********************'

PASSWORD_RESET_TIMEOUT

'********************'

PLANS_BILLINGINFO_MODEL

'plans.BillingInfo'

PLANS_CURRENCY

'SAR'

PLANS_EXPIRATION_REMIND

[3, 7, 14]

PLANS_INVOICE_ISSUER

{'issuer_city': 'Riyadh',
'issuer_country': 'SA',
'issuer_name': 'Tenhal Information Technology Company',
'issuer_street': '7095 King Faisal',
'issuer_tax_number': '1222233334444555',
'issuer_zipcode': '12613'}

PLANS_INVOICE_MODEL

'plans.Invoice'

PLANS_ORDER_MODEL

'plans.Order'

PLANS_PLANPRICING_MODEL

'plans.PlanPricing'

PLANS_PLANQUOTA_MODEL

'plans.PlanQuota'

PLANS_PLAN_MODEL

'plans.Plan'

PLANS_PRICING_MODEL

'plans.Pricing'

PLANS_QUOTA_MODEL

'plans.Quota'

PLANS_RECURRINGUSERPLAN_MODEL

'plans.RecurringUserPlan'

PLANS_TAX

Decimal('15')

PLANS_TAXATION_POLICY

'inventory.utilities.sa.SaudiTaxationPolicy'

PLANS_TAX_COUNTRY

'SA'

PLANS_USERPLAN_MODEL

'plans.UserPlan'

PLAN_DEFAULT_CURRENCY

'SAR'

PREPEND_WWW

False

PRODUCTION_DOMAIN

'haikal.ai'

Q_CLUSTER

{'compress': True,
'cpu_affinity': 1,
'label': 'Django Q',
'name': 'Hikal',
'queue_limit': 500,
'recycle': 500,
'redis': {'db': 0, 'host': '10.10.1.192', 'port': 6379},
'save_limit': 250,
'timeout': 60,
'workers': 4}

REST_FRAMEWORK

{'DEFAULT_AUTHENTICATION_CLASSES': '********************',
'DEFAULT_PERMISSION_CLASSES': ['rest_framework.permissions.AllowAny']}

ROOT_URLCONF

'car_inventory.urls'

SECRET_KEY

'********************'

SECRET_KEY_FALLBACKS

'********************'

SECURE_CONTENT_TYPE_NOSNIFF

True

SECURE_CROSS_ORIGIN_OPENER_POLICY

'same-origin'

SECURE_HSTS_INCLUDE_SUBDOMAINS

False

SECURE_HSTS_PRELOAD

False

SECURE_HSTS_SECONDS

0

SECURE_PROXY_SSL_HEADER

None

SECURE_REDIRECT_EXEMPT

[]

SECURE_REFERRER_POLICY

'same-origin'

SECURE_SSL_HOST

None

SECURE_SSL_REDIRECT

False

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

'car_inventory.settings'

SHORT_DATETIME_FORMAT

'm/d/Y P'

SHORT_DATE_FORMAT

'm/d/Y'

SIGNING_BACKEND

'django.core.signing.TimestampSigner'

SILENCED_SYSTEM_CHECKS

[]

SITE_DOMAIN

'haikal.ai'

SITE_ID

1

SITE_NAME

'Haikal'

SMS_BACKEND

'sms.backends.twilio.SmsBackend'

STATICFILES_DIRS

[PosixPath('/home/haikal/app/static')]

STATICFILES_FINDERS

['django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder']

STATICFILES_STORAGE

'whitenoise.storage.CompressedManifestStaticFilesStorage'

STATIC_ROOT

'/home/haikal/app/staticfiles'

STATIC_URL

'/static/'

STORAGES

{'default': {'BACKEND': 'django.core.files.storage.FileSystemStorage'},
'staticfiles': {'BACKEND': 'django.contrib.staticfiles.storage.StaticFilesStorage'}}

SUPPORT_EMAIL

'haikal@tenhal.sa'

TEMPLATES

[{'APP_DIRS': True,
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': ['/home/haikal/app/templates'],
'OPTIONS': {'context_processors': ['django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
'inventory.context_processors.currency_context',
'plans.context_processors.account_status'],
'debug': True}}]

TENHAL_IMAGE_GENERATOR_PASSWORD

'********************'

TENHAL_IMAGE_GENERATOR_URL

'http://10.10.1.144:8000'

TENHAL_IMAGE_GENERATOR_USERNAME

'tenhal'

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

'Asia/Riyadh'

TWILIO_ACCOUNT_SID

'AC988fcc2cce8ae4f36ffc58bf897bcb1d'

TWILIO_AUTH_TOKEN

'********************'

USE_I18N

True

USE_L10N

True

USE_THOUSAND_SEPARATOR

False

USE_TZ

True

USE_X_FORWARDED_HOST

False

USE_X_FORWARDED_PORT

False

WSGI_APPLICATION

'car_inventory.wsgi.application'

XLSX

<class 'import_export.formats.base_formats.XLSX'>

X_FRAME_OPTIONS

'DENY'

YEAR_MONTH_FORMAT

'F Y'

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.

AttributeError at /en/berain-motors/payment-callback/ 'NoneType' object has no attribute 'user' Request Method: GET Request URL: http://10.10.1.104:8000/en/berain-motors/payment-callback/?id=88c2049e-2805-4338-ba95-600d8fdeb9dd&status=paid&message=APPROVED Django Version: 5.2.4 Exception Type: AttributeError Exception Value: 'NoneType' object has no attribute 'user' Exception Location: /home/haikal/app/inventory/views.py, line 9862, in payment_callback Raised during: inventory.views.payment_callback Python Executable: /home/haikal/app/venv/bin/python3 Python Version: 3.11.2 Python Path: ['', '/home/haikal/app/venv/bin', '/usr/lib/python311.zip', '/usr/lib/python3.11', '/usr/lib/python3.11/lib-dynload', '/home/haikal/app/venv/lib/python3.11/site-packages'] Server time: Tue, 09 Sep 2025 17:41:00 +0300 Traceback Switch to copy-and-paste view /home/haikal/app/venv/lib/python3.11/site-packages/django/core/handlers/exception.py, line 42, in inner response = await get_response(request) ^^^^^^^^^^^^^^^^^^^^^^^^^^^ … Local vars /home/haikal/app/venv/lib/python3.11/site-packages/django/core/handlers/base.py, line 253, in _get_response_async response = await wrapped_callback( … Local vars /home/haikal/app/venv/lib/python3.11/site-packages/django/contrib/auth/decorators.py, line 59, in _view_wrapper return view_func(request, *args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ … Local vars /home/haikal/app/venv/lib/python3.11/site-packages/django/contrib/auth/decorators.py, line 59, in _view_wrapper return view_func(request, *args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ … Local vars /home/haikal/app/inventory/views.py, line 9862, in payment_callback } ) if created: logger.info(f"Created new billing info for user {dealer.user}.") else: logger.debug(f"Billing info already exists for user {dealer.user}.") if not hasattr(order.user, 'userplan'): ^^^^^^^^^^ … print(order.get_plan_pricing().pricing.period) UserPlan.objects.create( user=order.user, plan=order.plan, # expire=datetime.now().date() + timedelta(days=order.get_plan_pricing().pricing.period) ) Local vars Request information USER bodekig137@inupup.com GET Variable Value id '88c2049e-2805-4338-ba95-600d8fdeb9dd' status 'paid' message 'APPROVED' POST No POST data FILES No FILES data COOKIES Variable Value csrftoken '********************' sessionid '********************' django_language 'en' META Variable Value CSRF_COOKIE 'a6gMSGregiitrZWnLMmaXp8f2VzwFwsL' HTTP_ACCEPT 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' HTTP_ACCEPT_ENCODING 'gzip, deflate' HTTP_ACCEPT_LANGUAGE 'en-US,en;q=0.5' HTTP_CONNECTION 'keep-alive' HTTP_COOKIE '********************' HTTP_HOST '10.10.1.104:8000' HTTP_PRIORITY 'u=0, i' HTTP_UPGRADE_INSECURE_REQUESTS '1' HTTP_USER_AGENT 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:142.0) Gecko/20100101 Firefox/142.0' PATH_INFO '/en/berain-motors/payment-callback/' QUERY_STRING 'id=88c2049e-2805-4338-ba95-600d8fdeb9dd&status=paid&message=APPROVED' REMOTE_ADDR '10.10.1.126' REMOTE_HOST '10.10.1.126' REMOTE_PORT 47672 REQUEST_METHOD 'GET' SCRIPT_NAME '' SERVER_NAME '10.10.1.104' SERVER_PORT '8000' wsgi.multiprocess True wsgi.multithread True Settings Using settings module car_inventory.settings Setting Value ABSOLUTE_URL_OVERRIDES {} ACCOUNT_ACTIVATION_DAYS 0 ACCOUNT_CONFIRM_EMAIL_ON_GET True ACCOUNT_EMAIL_CONFIRMATION_EXPIRE_MINUTES 5 ACCOUNT_EMAIL_VERIFICATION 'optional' ACCOUNT_LOGIN_METHODS {'email'} ACCOUNT_LOGIN_ON_EMAIL_CONFIRMATION True ACCOUNT_LOGIN_ON_SIGNUP False ACCOUNT_LOGOUT_ON_PASSWORD_CHANGE '********************' ACCOUNT_SIGNUP_FIELDS ['email*', 'password1*', 'password2*'] ACCOUNT_SIGNUP_REDIRECT_URL '/' ACCOUNT_UNIQUE_EMAIL True ACCOUNT_USER_MODEL_USERNAME_FIELD 'email' ADMINS [] ALLOWED_HOSTS ['*'] APPEND_SLASH True ASGI_APPLICATION 'car_inventory.asgi.application' AUTHENTICATION_BACKENDS '********************' AUTH_PASSWORD_VALIDATORS '********************' AUTH_USER_MODEL '********************' BACKGROUND_TASK_ASYNC_THREADS 4 BACKGROUND_TASK_PRIORITY_ORDERING 'DESC' BACKGROUND_TASK_RUN_ASYNC True BASE_DIR PosixPath('/home/haikal/app') CACHES {'default': {'BACKEND': 'django.core.cache.backends.locmem.LocMemCache'}} CACHE_MIDDLEWARE_ALIAS 'default' CACHE_MIDDLEWARE_KEY_PREFIX '********************' CACHE_MIDDLEWARE_SECONDS 600 CAR_API_SECRET '********************' CAR_API_TOKEN '********************' CHANNEL_LAYERS {'default': {'BACKEND': 'channels_redis.core.RedisChannelLayer', 'CONFIG': {'channel_layer_kwargs': {'redis_kwargs': {'db': 1}}, 'hosts': [('10.10.1.192', '6379')]}}} CRISPY_ALLOWED_TEMPLATE_PACKS 'bootstrap5' CRISPY_TEMPLATE_PACK 'bootstrap5' 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 ['https://haikal.ai', 'https://*.haikal.ai', 'http://localhost:8000', 'http://127.0.0.1:8000'] CSRF_USE_SESSIONS False CSV <class 'import_export.formats.base_formats.CSV'> CURRENCY '﷼' DATABASES {'default': {'ATOMIC_REQUESTS': False, 'AUTOCOMMIT': True, 'CONN_HEALTH_CHECKS': False, 'CONN_MAX_AGE': 0, 'ENGINE': 'django.db.backends.postgresql', 'HOST': '10.10.1.119', 'NAME': 'dev_database', 'OPTIONS': {}, 'PASSWORD': '********************', 'PORT': '5432', 'TEST': {'CHARSET': None, 'COLLATION': None, 'MIGRATE': True, 'MIRROR': None, 'NAME': None}, 'TIME_ZONE': None, 'USER': 'dev_user'}} DATABASE_ROUTERS [] DATA_UPLOAD_MAX_MEMORY_SIZE 2621440 DATA_UPLOAD_MAX_NUMBER_FIELDS 1000 DATA_UPLOAD_MAX_NUMBER_FILES 100 DATETIME_FORMAT 'N j, Y, P' DATETIME_INPUT_FORMATS ['%Y-%m-%d %H:%M:%S', '%Y-%m-%d %H:%M:%S.%f', '%Y-%m-%d %H:%M', '%m/%d/%Y %H:%M:%S', '%m/%d/%Y %H:%M:%S.%f', '%m/%d/%Y %H:%M', '%m/%d/%y %H:%M:%S', '%m/%d/%y %H:%M:%S.%f', '%m/%d/%y %H:%M'] 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_AUTO_FIELD 'django.db.models.BigAutoField' DEFAULT_CHARSET 'utf-8' DEFAULT_CURRENCY 'SAR' DEFAULT_EXCEPTION_REPORTER 'django.views.debug.ExceptionReporter' DEFAULT_EXCEPTION_REPORTER_FILTER 'django.views.debug.SafeExceptionReporterFilter' DEFAULT_FROM_EMAIL 'haikal@tenhal.sa' DEFAULT_INDEX_TABLESPACE '' DEFAULT_TABLESPACE '' DISALLOWED_USER_AGENTS [] DJANGO_LEDGER_ACCOUNT_MODEL 'django_ledger.AccountModel' DJANGO_LEDGER_CURRENCY_SYMBOL 'SAR ' DJANGO_LEDGER_CUSTOMER_MODEL 'django_ledger.CustomerModel' DJANGO_LEDGER_ENTITY_MODEL 'django_ledger.EntityModel' DJANGO_LEDGER_ESTIMATE_MODEL 'django_ledger.EstimateModel' DJANGO_LEDGER_INVOICE_MODEL 'django_ledger.InvoiceModel' DJANGO_LEDGER_ITEM_MODEL 'django_ledger.ItemModel' DJANGO_LEDGER_PDF_SUPPORT_ENABLED True DJANGO_LEDGER_VENDOR_MODEL 'django_ledger.VendorModel' DJANGO_TABLES2_PAGE_RANGE 10 DJANGO_TABLES2_TEMPLATE 'partials/tables.html' ELM_APP_ID 'c2729afb' ELM_APP_KEY '********************' ELM_CLIENT_ID '94142c27-2536-47e9-8e28-9ca7728b9442' EMAIL_BACKEND 'django.core.mail.backends.smtp.EmailBackend' EMAIL_HOST 'smtp.gmail.com' EMAIL_HOST_PASSWORD '********************' EMAIL_HOST_USER 'haikal@tenhal.sa' EMAIL_PORT '587' 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 True EXPORT_FORMATS [<class 'import_export.formats.base_formats.CSV'>, <class 'import_export.formats.base_formats.XLSX'>] FAKE_SMTP_ALLOW_ALL_RECIPIENTS True FIELD_ENCRYPTION_KEY '********************' FILE_UPLOAD_DIRECTORY_PERMISSIONS None FILE_UPLOAD_HANDLERS ['django.core.files.uploadhandler.MemoryFileUploadHandler', 'django.core.files.uploadhandler.TemporaryFileUploadHandler'] FILE_UPLOAD_MAX_MEMORY_SIZE 104857600 FILE_UPLOAD_PERMISSIONS 420 FILE_UPLOAD_TEMP_DIR None FIRST_DAY_OF_WEEK 0 FIXTURE_DIRS [] FOOTER_LOGO_PATH 'images/logos/Logo-all.png' FORCE_SCRIPT_NAME None FORMAT_MODULE_PATH None FORMS_URLFIELD_ASSUME_HTTPS False FORM_RENDERER 'django.forms.renderers.DjangoTemplates' FPDF <class 'fpdf.fpdf.FPDF'> IGNORABLE_404_URLS [] IMAGEKIT_CACHEFILE_DIR 'CACHE/images' IMAGEKIT_CACHEFILE_NAMER 'imagekit.cachefiles.namers.hash' IMAGEKIT_CACHE_BACKEND 'default' IMAGEKIT_CACHE_PREFIX 'imagekit:' IMAGEKIT_CACHE_TIMEOUT 300 IMAGEKIT_DEFAULT_CACHEFILE_BACKEND 'imagekit.cachefiles.backends.Simple' IMAGEKIT_DEFAULT_CACHEFILE_STRATEGY 'imagekit.cachefiles.strategies.JustInTime' IMAGEKIT_DEFAULT_FILE_STORAGE 'default' IMAGEKIT_SPEC_CACHEFILE_NAMER 'imagekit.cachefiles.namers.source_name_as_path' IMAGEKIT_USE_MEMCACHED_SAFE_CACHE_KEY '********************' IMPORT_FORMATS [<class 'import_export.formats.base_formats.CSV'>, <class 'import_export.formats.base_formats.XLSX'>] INSTALLED_APPS ['daphne', 'django.contrib.sites', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'django.contrib.humanize', 'inventory', 'allauth', 'allauth.account', 'allauth.socialaccount', 'allauth.socialaccount.providers.google', 'django_tables2', 'django_bootstrap5', 'crispy_forms', 'crispy_bootstrap5', 'phonenumber_field', 'rest_framework', 'rest_framework.authtoken', 'django_extensions', 'django_ledger', 'haikalbot', 'appointment', 'django_q', 'plans', 'sequences', 'api', 'widget_tweaks', 'schema_graph', 'easyaudit', 'tours', 'channels', 'encrypted_model_fields'] INTERNAL_IPS ['127.0.0.1'] INVOICE_PAST_DUE_REMIND [3, 7, 14] LANGUAGES [('en', 'English'), ('ar', 'Arabic')] LANGUAGES_BIDI ['he', 'ar', 'ar-dz', 'ckb', 'fa', 'ug', 'ur'] LANGUAGE_CODE 'en' LANGUAGE_COOKIE_AGE None LANGUAGE_COOKIE_DOMAIN None LANGUAGE_COOKIE_HTTPONLY False LANGUAGE_COOKIE_NAME 'django_language' LANGUAGE_COOKIE_PATH '/' LANGUAGE_COOKIE_SAMESITE None LANGUAGE_COOKIE_SECURE False LOCALE_PATHS ('/home/haikal/app/locale',) LOGGING {'disable_existing_loggers': False, 'formatters': {'simple': {'format': '{levelname} {message}', 'style': '{'}, 'verbose': {'format': '{levelname} {asctime} {name} ' '{process:d} {thread:d} {message}', 'style': '{'}}, 'handlers': {'console': {'class': 'logging.StreamHandler', 'formatter': 'simple'}, 'file': {'backupCount': 5, 'class': 'logging.handlers.RotatingFileHandler', 'filename': '/home/haikal/app/logs/inventory.log', 'formatter': 'verbose', 'maxBytes': 5242880}}, 'loggers': {'django': {'handlers': ['console'], 'level': 'INFO'}, 'inventory': {'handlers': ['file'], 'level': 'DEBUG', 'propagate': False}, 'openai': {'handlers': ['console'], 'level': 'WARNING'}}, 'version': 1} LOGGING_CONFIG 'logging.config.dictConfig' LOGIN_REDIRECT_URL 'home' LOGIN_URL '/accounts/login/' LOGOUT_REDIRECT_URL '/' LOG_DIR '/home/haikal/app/logs' MANAGERS [] MEDIA_ROOT '/home/haikal/app/static/images' MEDIA_URL '/images/' MESSAGE_STORAGE 'django.contrib.messages.storage.fallback.FallbackStorage' MIDDLEWARE ['django_prometheus.middleware.PrometheusBeforeMiddleware', 'django.middleware.security.SecurityMiddleware', 'whitenoise.middleware.WhiteNoiseMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.locale.LocaleMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'allauth.account.middleware.AccountMiddleware', 'inventory.middleware.InjectDealerMiddleware', 'inventory.middleware.DealerSlugMiddleware', 'easyaudit.middleware.easyaudit.EasyAuditMiddleware', 'django_prometheus.middleware.PrometheusAfterMiddleware'] MIGRATION_MODULES {} MONTH_DAY_FORMAT 'F j' MOYASAR_PUBLISHABLE_KEY '********************' MOYASAR_SECRET_KEY '********************' NUMBER_GROUPING 0 OPENAI_API_KEY '********************' OPENAI_API_KEY_OLD '********************' PASSWORD_HASHERS '********************' PASSWORD_RESET_TIMEOUT '********************' PLANS_BILLINGINFO_MODEL 'plans.BillingInfo' PLANS_CURRENCY 'SAR' PLANS_EXPIRATION_REMIND [3, 7, 14] PLANS_INVOICE_ISSUER {'issuer_city': 'Riyadh', 'issuer_country': 'SA', 'issuer_name': 'Tenhal Information Technology Company', 'issuer_street': '7095 King Faisal', 'issuer_tax_number': '1222233334444555', 'issuer_zipcode': '12613'} PLANS_INVOICE_MODEL 'plans.Invoice' PLANS_ORDER_MODEL 'plans.Order' PLANS_PLANPRICING_MODEL 'plans.PlanPricing' PLANS_PLANQUOTA_MODEL 'plans.PlanQuota' PLANS_PLAN_MODEL 'plans.Plan' PLANS_PRICING_MODEL 'plans.Pricing' PLANS_QUOTA_MODEL 'plans.Quota' PLANS_RECURRINGUSERPLAN_MODEL 'plans.RecurringUserPlan' PLANS_TAX Decimal('15') PLANS_TAXATION_POLICY 'inventory.utilities.sa.SaudiTaxationPolicy' PLANS_TAX_COUNTRY 'SA' PLANS_USERPLAN_MODEL 'plans.UserPlan' PLAN_DEFAULT_CURRENCY 'SAR' PREPEND_WWW False PRODUCTION_DOMAIN 'haikal.ai' Q_CLUSTER {'compress': True, 'cpu_affinity': 1, 'label': 'Django Q', 'name': 'Hikal', 'queue_limit': 500, 'recycle': 500, 'redis': {'db': 0, 'host': '10.10.1.192', 'port': 6379}, 'save_limit': 250, 'timeout': 60, 'workers': 4} REST_FRAMEWORK {'DEFAULT_AUTHENTICATION_CLASSES': '********************', 'DEFAULT_PERMISSION_CLASSES': ['rest_framework.permissions.AllowAny']} ROOT_URLCONF 'car_inventory.urls' SECRET_KEY '********************' SECRET_KEY_FALLBACKS '********************' SECURE_CONTENT_TYPE_NOSNIFF True SECURE_CROSS_ORIGIN_OPENER_POLICY 'same-origin' SECURE_HSTS_INCLUDE_SUBDOMAINS False SECURE_HSTS_PRELOAD False SECURE_HSTS_SECONDS 0 SECURE_PROXY_SSL_HEADER None SECURE_REDIRECT_EXEMPT [] SECURE_REFERRER_POLICY 'same-origin' SECURE_SSL_HOST None SECURE_SSL_REDIRECT False 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 'car_inventory.settings' SHORT_DATETIME_FORMAT 'm/d/Y P' SHORT_DATE_FORMAT 'm/d/Y' SIGNING_BACKEND 'django.core.signing.TimestampSigner' SILENCED_SYSTEM_CHECKS [] SITE_DOMAIN 'haikal.ai' SITE_ID 1 SITE_NAME 'Haikal' SMS_BACKEND 'sms.backends.twilio.SmsBackend' STATICFILES_DIRS [PosixPath('/home/haikal/app/static')] STATICFILES_FINDERS ['django.contrib.staticfiles.finders.FileSystemFinder', 'django.contrib.staticfiles.finders.AppDirectoriesFinder'] STATICFILES_STORAGE 'whitenoise.storage.CompressedManifestStaticFilesStorage' STATIC_ROOT '/home/haikal/app/staticfiles' STATIC_URL '/static/' STORAGES {'default': {'BACKEND': 'django.core.files.storage.FileSystemStorage'}, 'staticfiles': {'BACKEND': 'django.contrib.staticfiles.storage.StaticFilesStorage'}} SUPPORT_EMAIL 'haikal@tenhal.sa' TEMPLATES [{'APP_DIRS': True, 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': ['/home/haikal/app/templates'], 'OPTIONS': {'context_processors': ['django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', 'inventory.context_processors.currency_context', 'plans.context_processors.account_status'], 'debug': True}}] TENHAL_IMAGE_GENERATOR_PASSWORD '********************' TENHAL_IMAGE_GENERATOR_URL 'http://10.10.1.144:8000' TENHAL_IMAGE_GENERATOR_USERNAME 'tenhal' 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 'Asia/Riyadh' TWILIO_ACCOUNT_SID 'AC988fcc2cce8ae4f36ffc58bf897bcb1d' TWILIO_AUTH_TOKEN '********************' USE_I18N True USE_L10N True USE_THOUSAND_SEPARATOR False USE_TZ True USE_X_FORWARDED_HOST False USE_X_FORWARDED_PORT False WSGI_APPLICATION 'car_inventory.wsgi.application' XLSX <class 'import_export.formats.base_formats.XLSX'> X_FRAME_OPTIONS 'DENY' YEAR_MONTH_FORMAT 'F Y' 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.
Faheed reopened this issue 2025-09-09 17:43:24 +03:00
Sign in to join this conversation.
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: ismail/haikal#242
No description provided.