Field 'key' expected a number but got ''.
Request Method: | GET |
---|---|
Request URL: | https://ovalik.com/catalog/product/278?edit_pub_product=y&edit_pub=91&edit_product=278 |
Django Version: | 4.0.3 |
Exception Type: | ValueError |
Exception Value: | Field 'key' expected a number but got ''. |
Exception Location: | /var/www/ovalik.com/env/lib/python3.9/site-packages/django/db/models/fields/__init__.py, line 1990, in get_prep_value |
Python Executable: | /var/www/ovalik.com/env/bin/python |
Python Version: | 3.9.2 |
Python Path: | ['/var/www/ovalik.com', '/var/www/ovalik.com/env/bin', '/usr/lib/python39.zip', '/usr/lib/python3.9', '/usr/lib/python3.9/lib-dynload', '/var/www/ovalik.com/env/lib/python3.9/site-packages'] |
Server time: | Fri, 29 Mar 2024 15:32:02 +0400 |
/var/www/ovalik.com/env/lib/python3.9/site-packages/django/db/models/fields/__init__.py
, line 1988, in get_prep_value
return validators_
def get_prep_value(self, value):
value = super().get_prep_value(value)
if value is None:
return None
try:
return int(value)…
except (TypeError, ValueError) as e:
raise e.__class__(
"Field '%s' expected a number but got %r." % (self.name, value),
) from e
def get_internal_type(self):
Variable | Value |
---|---|
__class__ | <class 'django.db.models.fields.IntegerField'> |
self | <django.db.models.fields.IntegerField: key> |
value | '' |
/var/www/ovalik.com/env/lib/python3.9/site-packages/django/core/handlers/exception.py
, line 55, in inner
return inner
else:
@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 | ValueError("Field 'key' expected a number but got ''.") |
get_response | <bound method BaseHandler._get_response of <django.core.handlers.wsgi.WSGIHandler object at 0x7fcfe233df70>> |
request | <WSGIRequest: GET '/catalog/product/278?edit_pub_product=y&edit_pub=91&edit_product=278'> |
/var/www/ovalik.com/env/lib/python3.9/site-packages/django/core/handlers/base.py
, line 197, in _get_response
if response is None:
wrapped_callback = self.make_view_atomic(callback)
# If it is an asynchronous view, run it in a subthread.
if asyncio.iscoroutinefunction(wrapped_callback):
wrapped_callback = async_to_sync(wrapped_callback)
try:
response = wrapped_callback(request, *callback_args, **callback_kwargs)…
except Exception as e:
response = self.process_exception_by_middleware(e, request)
if response is None:
raise
# Complain if the view returned None (a common error).
Variable | Value |
---|---|
callback | <function catalog_product at 0x7fcfe0fd0160> |
callback_args | () |
callback_kwargs | {'product': '278'} |
request | <WSGIRequest: GET '/catalog/product/278?edit_pub_product=y&edit_pub=91&edit_product=278'> |
response | None |
self | <django.core.handlers.wsgi.WSGIHandler object at 0x7fcfe233df70> |
wrapped_callback | <function catalog_product at 0x7fcfe0fd0160> |
/var/www/ovalik.com/website/views/catalog.py
, line 1339, in catalog_product
publication__moderate=True,
publication__visibly=True
).count()
json_orders = [{'id': order.id, 'status': order.status, 'options': json.loads(order.options), 'quantity': order.quantity} for order in models.Orders.objects.filter(product=product_data, status='B').iterator()]
cart_key = request.COOKIES.get('cart', '')
cart_items = models.Cart.objects.filter(key=cart_key, product=product_data).iterator()…
for cart_item in cart_items:
if request.POST.get('edit', '') != '':
if int(request.POST.get('edit', '')) != int(cart_item.id):
json_orders.append({
'id': cart_item.id,
Variable | Value |
---|---|
ReviewsForm | <class 'website.forms.ReviewsForm'> |
block_dates | [] |
buy_with | [] |
cart_key | '' |
categories_ids | <QuerySet [91]> |
cities | <generator object QuerySet._iterator at 0x7fcfe0637660> |
city | <ProductsCities: Педикюр женский в SpaStudio> |
city_data | [{'employer': '', 'quantity': 1, 'time': ''}] |
country | <Countries: Россия> |
country_weekends | ['31.12.2022', '24.12.2022', '25.12.2022', '01.01.2023', '18.12.2022', '17.12.2022', '10.12.2022', '11.12.2022', '04.12.2022', '03.12.2022', '02.01.2023', '03.01.2023', '05.01.2023', '04.01.2023', '06.01.2023', '07.01.2023', '08.01.2023', '14.01.2023', '15.01.2023', '22.01.2023', '21.01.2023', '28.01.2023', '29.01.2023', '11.11.2023', '04.11.2023', '05.11.2023', '12.11.2023', '18.11.2023', '19.11.2023', '25.11.2023', '26.11.2023', '09.12.2023', '03.12.2023', '10.12.2023', '02.12.2023', '16.12.2023', '17.12.2023', '24.12.2023', '23.12.2023', '30.12.2023', '31.12.2023', '06.01.2024', '07.01.2024', '13.01.2024', '14.01.2024', '21.01.2024', '20.01.2024', '27.01.2024', '28.01.2024', '03.02.2024', '04.02.2024', '10.02.2024', '11.02.2024', '01.01.2024', '02.01.2024', '04.01.2024', '05.01.2024', '03.01.2024', '17.02.2024', '24.02.2024', '25.02.2024', '18.02.2024', '29.10.2023', '28.10.2023', '31.10.2023'] |
employer_id | '' |
form | <ReviewsForm bound=False, valid=Unknown, fields=(id;rating;comment)> |
geolocation | {'city': {'icon': '', 'id': '', 'metro': '', 'metro_items': '', 'name': '', 'region': '', 'similar': []}, 'country': {'icon': '/media/Countries/ru.jpg', 'id': 1, 'name': 'Россия'}, 'profile_city': '', 'profile_country': '', 'profile_region': '', 'region': {'icon': '', 'id': '', 'name': ''}} |
item | {'employer': '', 'quantity': 1, 'time': ''} |
json_employers | [] |
json_options | [{'id': 1, 'name': 'Велосипед', 'values': {24: '10-20 кг', 25: '21-33 кг', 26: '31-40 кг', 27: '40-51 кг', 30: '50-62 кг'}}, {'id': 2, 'name': 'Характеристика', 'values': {28: 'горный', 29: 'скоростной'}}, {'id': 3, 'name': 'Дополнительно', 'values': {21: 'Чай', 22: 'Кофе', 23: 'Снеки', 156: 'Чай2'}}, {'id': 4, 'name': 'Рост', 'values': {60: '210-220 см.', 61: '200-210 см.', 62: '190-200 см.', 63: '180-190 см.', 64: '170-180 см.', 65: '160-170 см.', 66: '150-160 см.', 67: '140-150 см.', 68: '130-140 см.', 69: '120-130 см.', 70: '110-120 см.', 71: '100-110 см.', 72: '90-100 см.'}}, {'id': 5, 'name': 'Размер обуви', 'values': {73: '48', 74: '47', 75: '46', 76: '45', 77: '44', 78: '43', 79: '42', 80: '41', 81: '40', 82: '39', 83: '38', 84: '37', 85: '36', 86: '35', 87: '34', 88: '33', 89: '32', 90: '31', 91: '30', 92: '29', 93: '28'}}, {'id': 6, 'name': 'Размер шлема', 'values': {94: 'S', 95: 'M', 96: 'L', 97: 'XL'}}, {'id': 7, 'name': 'Размер защиты низа', 'values': {98: 'S', 99: 'M', 100: 'L', 101: 'XL'}}, {'id': 8, 'name': 'Размер защиты верха', 'values': {102: 'S', 103: 'M', 104: 'L', 105: 'XL'}}, {'id': 9, 'name': 'Скипасс по подъёмам', 'values': {106: '1 подъём', 107: '5 подъёмов', 108: '10 подъёмов'}}, {'id': 10, 'name': 'Скипасс по часам (пн - пт)', 'values': {109: '1 час', 110: '3 часа', 111: '3 часа (студенты, школьники, пенсионеры)', 112: '3 часа (детский)'}}, {'id': 11, 'name': 'Скипасс дневной', 'values': {113: 'один день с 9:00 до 17:00 (пн - вс)', 114: 'один выходной с 9:00 до 17:00 (сб, вс, праздники)', 115: 'два выходных подряд (сб, вс, праздники)'}}, {'id': 12, 'name': 'Скипасс карта', 'values': {116: '(1 шт.)', 117: '(2 шт.)', 118: '(3 шт.)', 119: '(4 шт.)', 120: '(5 шт.)'}}, {'id': 13, 'name': 'Скипасс по часам (сб, вс, выходной)', 'values': {121: '1 час', 122: '3 часа', 123: '3 часа (студенты, школьники, пенсионеры)', 124: '3 часа (детский)'}}, {'id': 14, 'name': 'Скипасс абонемент', 'values': {125: 'на неделю', 126: 'на месяц', 127: 'весь сезон'}}, {'id': 15, 'name': 'Инструктор (кол-во)', 'values': {128: 'Индивидуальное обучение (будни)', 129: 'Индивидуальное обучение (выходные)', 130: '2 человека (будни)', 131: '2 человека (выходные)', 132: 'от 3 человек (будни)', 133: 'от 3 человек (выходные)', 216: 'Индивидуальное обучение', 217: 'Групповое занятие (2 человека)', 218: 'Групповое занятие (3 человека)', 219: 'Групповое занятие (4 человека)'}}, {'id': 16, 'name': 'Абонемент в фитнес', 'values': {134: 'пробный день', 135: 'разовое посещение', 136: 'на месяц', 137: 'на 3 месяца', 138: 'на 6 месяцев', 139: 'на год'}}, {'id': 20, 'name': 'Покрытие ногтя', 'values': {145: 'Лаком', 149: 'Гель-лаком'}}, {'id': 21, 'name': 'Снятие лака с ногтя', 'values': {146: 'Со снятием'}}, {'id': 22, 'name': 'Педикюр', 'values': {147: 'Экспресс SMART', 148: 'Экспресс', 187: 'SMART', 188: 'Комплекс', 189: 'Только пальцы', 195: 'Обработка стопы ', 196: 'Обработка трещин на стопе'}}, {'id': 23, 'name': 'Лечебное покрытие ногтя', 'values': {150: 'С лечебным покрытием'}}, {'id': 24, 'name': 'Ремонт ногтя', 'values': {151: 'С ремонтом ногтя'}}, {'id': 25, 'name': 'Д… <trimmed 24239 bytes string> |
json_orders | [] |
json_quantity | [{'address': 'Россия, Самарская обл, г Самара, ул Галактионовская, д 68 ', 'city_name': 'Самара', 'country_name': 'Россия', 'media': [], 'quantity': 1, 'region_name': 'Самарская область'}] |
json_weekends | ('["31.12.2022", "24.12.2022", "25.12.2022", "01.01.2023", "18.12.2022", ' '"17.12.2022", "10.12.2022", "11.12.2022", "04.12.2022", "03.12.2022", ' '"02.01.2023", "03.01.2023", "05.01.2023", "04.01.2023", "06.01.2023", ' '"07.01.2023", "08.01.2023", "14.01.2023", "15.01.2023", "22.01.2023", ' '"21.01.2023", "28.01.2023", "29.01.2023", "11.11.2023", "04.11.2023", ' '"05.11.2023", "12.11.2023", "18.11.2023", "19.11.2023", "25.11.2023", ' '"26.11.2023", "09.12.2023", "03.12.2023", "10.12.2023", "02.12.2023", ' '"16.12.2023", "17.12.2023", "24.12.2023", "23.12.2023", "30.12.2023", ' '"31.12.2023", "06.01.2024", "07.01.2024", "13.01.2024", "14.01.2024", ' '"21.01.2024", "20.01.2024", "27.01.2024", "28.01.2024", "03.02.2024", ' '"04.02.2024", "10.02.2024", "11.02.2024", "01.01.2024", "02.01.2024", ' '"04.01.2024", "05.01.2024", "03.01.2024", "17.02.2024", "24.02.2024", ' '"25.02.2024", "18.02.2024", "29.10.2023", "28.10.2023", "31.10.2023"]') |
option_values | <QuerySet [{'option_id': 3, 'id': 21, 'value': 'Чай'}, {'option_id': 3, 'id': 22, 'value': 'Кофе'}, {'option_id': 3, 'id': 23, 'value': 'Снеки'}, {'option_id': 1, 'id': 24, 'value': '10-20 кг'}, {'option_id': 1, 'id': 25, 'value': '21-33 кг'}, {'option_id': 1, 'id': 26, 'value': '31-40 кг'}, {'option_id': 1, 'id': 27, 'value': '40-51 кг'}, {'option_id': 2, 'id': 28, 'value': 'горный'}, {'option_id': 2, 'id': 29, 'value': 'скоростной'}, {'option_id': 1, 'id': 30, 'value': '50-62 кг'}, {'option_id': 4, 'id': 60, 'value': '210-220 см.'}, {'option_id': 4, 'id': 61, 'value': '200-210 см.'}, {'option_id': 4, 'id': 62, 'value': '190-200 см.'}, {'option_id': 4, 'id': 63, 'value': '180-190 см.'}, {'option_id': 4, 'id': 64, 'value': '170-180 см.'}, {'option_id': 4, 'id': 65, 'value': '160-170 см.'}, {'option_id': 4, 'id': 66, 'value': '150-160 см.'}, {'option_id': 4, 'id': 67, 'value': '140-150 см.'}, {'option_id': 4, 'id': 68, 'value': '130-140 см.'}, {'option_id': 4, 'id': 69, 'value': '120-130 см.'}, '...(remaining elements truncated)...']> |
orders | None |
personal_reviews | None |
product | '278' |
product_data | <Products: Педикюр женский в SpaStudio> |
product_options_values | [{'address': 'Все адреса', 'infinity': 'Y', 'option_id': 20, 'option_value': 'Лаком', 'price': 300, 'price_type': 'B', 'product_id': 278, 'quantity': 0, 'type': <Option: Покрытие ногтя>}, {'address': 'Все адреса', 'infinity': 'Y', 'option_id': 20, 'option_value': 'Гель-лаком', 'price': 700, 'price_type': 'B', 'product_id': 278, 'quantity': 0, 'type': <Option: Покрытие ногтя>}, {'address': 'Все адреса', 'infinity': 'Y', 'option_id': 21, 'option_value': 'Со снятием', 'price': 300, 'price_type': 'B', 'product_id': 278, 'quantity': 0, 'type': <Option: Снятие лака с ногтя>}, {'address': 'Все адреса', 'infinity': 'Y', 'option_id': 23, 'option_value': 'С лечебным покрытием', 'price': 300, 'price_type': 'B', 'product_id': 278, 'quantity': 0, 'type': <Option: Лечебное покрытие ногтя>}, {'address': 'Все адреса', 'infinity': 'Y', 'option_id': 24, 'option_value': 'С ремонтом ногтя', 'price': 100, 'price_type': 'B', 'product_id': 278, 'quantity': 0, 'type': <Option: Ремонт ногтя>}, {'address': 'Все адреса', 'infinity': 'Y', 'option_id': 25, 'option_value': 'Слайдер', 'price': 100, 'price_type': 'B', 'product_id': 278, 'quantity': 0, 'type': <Option: Дизайн ногтя>}, {'address': 'Все адреса', 'infinity': 'Y', 'option_id': 25, 'option_value': 'Рисунок', 'price': 150, 'price_type': 'B', 'product_id': 278, 'quantity': 0, 'type': <Option: Дизайн ногтя>}, {'address': 'Все адреса', 'infinity': 'Y', 'option_id': 22, 'option_value': 'Экспресс', 'price': 0, 'price_type': 'B', 'product_id': 278, 'quantity': 0, 'type': <Option: Педикюр>}, {'address': 'Все адреса', 'infinity': 'Y', 'option_id': 22, 'option_value': 'Только пальцы', 'price': 0, 'price_type': 'B', 'product_id': 278, 'quantity': 0, 'type': <Option: Педикюр>}, {'address': 'Все адреса', 'infinity': 'Y', 'option_id': 22, 'option_value': 'Обработка стопы ', 'price': 400, 'price_type': 'B', 'product_id': 278, 'quantity': 0, 'type': <Option: Педикюр>}, {'address': 'Все адреса', 'infinity': 'Y', 'option_id': 22, 'option_value': 'Обработка трещин на стопе', 'price': 600, 'price_type': 'B', 'product_id': 278, 'quantity': 0, 'type': <Option: Педикюр>}, {'address': 'Все адреса', 'infinity': 'Y', 'option_id': 22, 'option_value': 'Экспресс SMART', 'price': 800, 'price_type': 'B', 'product_id': 278, 'quantity': 0, 'type': <Option: Педикюр>}, {'address': 'Все адреса', 'infinity': 'Y', 'option_id': 22, 'option_value': 'Комплекс', 'price': 1100, 'price_type': 'B', 'product_id': 278, 'quantity': 0, 'type': <Option: Педикюр>}, {'address': 'Все адреса', 'infinity': 'Y', 'option_id': 22, 'option_value': 'SMART', 'price': 1500, 'price_type': 'B', 'product_id': 278, 'quantity': 0, 'type': <Option: Педикюр>}] |
products_publications | 1 |
provision_dates | [] |
provision_days | [] |
rating_votes | 0 |
request | <WSGIRequest: GET '/catalog/product/278?edit_pub_product=y&edit_pub=91&edit_product=278'> |
reviews | <QuerySet []> |
seller_products | [] |
success | None |
total_rating | 0 |
/var/www/ovalik.com/env/lib/python3.9/site-packages/django/db/models/manager.py
, line 85, in manager_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 = {}
Variable | Value |
---|---|
args | () |
kwargs | {'key': '', 'product': <Products: Педикюр женский в SpaStudio>} |
name | 'filter' |
self | <django.db.models.manager.Manager object at 0x7fcfe0e63970> |
/var/www/ovalik.com/env/lib/python3.9/site-packages/django/db/models/query.py
, line 1071, in filter
def filter(self, *args, **kwargs):
"""
Return a new QuerySet instance with the args ANDed to the existing
set.
"""
self._not_support_combined_queries("filter")
return self._filter_or_exclude(False, args, kwargs)…
def exclude(self, *args, **kwargs):
"""
Return a new QuerySet instance with NOT (args) ANDed to the existing
set.
"""
Variable | Value |
---|---|
args | () |
kwargs | {'key': '', 'product': <Products: Педикюр женский в SpaStudio>} |
self | <QuerySet []> |
/var/www/ovalik.com/env/lib/python3.9/site-packages/django/db/models/query.py
, line 1089, in _filter_or_exclude
if (args or kwargs) and self.query.is_sliced:
raise TypeError("Cannot filter a query once a slice has been taken.")
clone = self._chain()
if self._defer_next_filter:
self._defer_next_filter = False
clone._deferred_filter = negate, args, kwargs
else:
clone._filter_or_exclude_inplace(negate, args, kwargs)…
return clone
def _filter_or_exclude_inplace(self, negate, args, kwargs):
if negate:
self._query.add_q(~Q(*args, **kwargs))
else:
Variable | Value |
---|---|
args | () |
clone | <QuerySet []> |
kwargs | {'key': '', 'product': <Products: Педикюр женский в SpaStudio>} |
negate | False |
self | <QuerySet []> |
/var/www/ovalik.com/env/lib/python3.9/site-packages/django/db/models/query.py
, line 1096, in _filter_or_exclude_inplace
clone._filter_or_exclude_inplace(negate, args, kwargs)
return clone
def _filter_or_exclude_inplace(self, negate, args, kwargs):
if negate:
self._query.add_q(~Q(*args, **kwargs))
else:
self._query.add_q(Q(*args, **kwargs))…
def complex_filter(self, filter_obj):
"""
Return a new QuerySet instance with filter_obj added to the filters.
filter_obj can be a Q object or a dictionary of keyword lookup
Variable | Value |
---|---|
args | () |
kwargs | {'key': '', 'product': <Products: Педикюр женский в SpaStudio>} |
negate | False |
self | <QuerySet []> |
/var/www/ovalik.com/env/lib/python3.9/site-packages/django/db/models/sql/query.py
, line 1466, in add_q
# type to remain inner. Existing outer joins can however be demoted.
# (Consider case where rel_a is LOUTER and rel_a__col=1 is added - if
# rel_a doesn't produce any rows, then the whole condition must fail.
# So, demotion is OK.
existing_inner = {
a for a in self.alias_map if self.alias_map[a].join_type == INNER
}
clause, _ = self._add_q(q_object, self.used_aliases)…
if clause:
self.where.add(clause, AND)
self.demote_joins(existing_inner)
def build_where(self, filter_expr):
return self.build_filter(filter_expr, allow_joins=False)[0]
Variable | Value |
---|---|
existing_inner | set() |
q_object | <Q: (AND: ('key', ''), ('product', <Products: Педикюр женский в SpaStudio>))> |
self | <django.db.models.sql.query.Query object at 0x7fcfe039c460> |
/var/www/ovalik.com/env/lib/python3.9/site-packages/django/db/models/sql/query.py
, line 1496, in _add_q
current_negated = current_negated ^ q_object.negated
branch_negated = branch_negated or q_object.negated
target_clause = WhereNode(connector=connector, negated=q_object.negated)
joinpromoter = JoinPromoter(
q_object.connector, len(q_object.children), current_negated
)
for child in q_object.children:
child_clause, needed_inner = self.build_filter(…
child,
can_reuse=used_aliases,
branch_negated=branch_negated,
current_negated=current_negated,
allow_joins=allow_joins,
split_subq=split_subq,
Variable | Value |
---|---|
allow_joins | True |
branch_negated | False |
check_filterable | True |
child | ('key', '') |
connector | 'AND' |
current_negated | False |
joinpromoter | <django.db.models.sql.query.JoinPromoter object at 0x7fcfe064d550> |
q_object | <Q: (AND: ('key', ''), ('product', <Products: Педикюр женский в SpaStudio>))> |
self | <django.db.models.sql.query.Query object at 0x7fcfe039c460> |
split_subq | True |
target_clause | <WhereNode: (AND: )> |
used_aliases | {'website_cart'} |
/var/www/ovalik.com/env/lib/python3.9/site-packages/django/db/models/sql/query.py
, line 1412, in build_filter
else:
col = MultiColSource(
alias, targets, join_info.targets, join_info.final_field
)
else:
col = self._get_col(targets[0], join_info.final_field, alias)
condition = self.build_lookup(lookups, col, value)…
lookup_type = condition.lookup_name
clause = WhereNode([condition], connector=AND)
require_outer = (
lookup_type == "isnull" and condition.rhs is True and not current_negated
)
Variable | Value |
---|---|
alias | 'website_cart' |
allow_joins | True |
allow_many | True |
arg | 'key' |
branch_negated | False |
can_reuse | {'website_cart'} |
check_filterable | True |
col | Col(website_cart, website.Cart.key) |
current_negated | False |
filter_expr | ('key', '') |
join_info | JoinInfo(final_field=<django.db.models.fields.IntegerField: key>, targets=(<django.db.models.fields.IntegerField: key>,), opts=<Options for Cart>, joins=['website_cart'], path=[], transform_function=<function Query.setup_joins.<locals>.final_transformer at 0x7fcfe237fee0>) |
join_list | ['website_cart'] |
lookups | [] |
opts | <Options for Cart> |
parts | ['key'] |
pre_joins | {} |
reffed_expression | False |
self | <django.db.models.sql.query.Query object at 0x7fcfe039c460> |
split_subq | True |
targets | (<django.db.models.fields.IntegerField: key>,) |
used_joins | {'website_cart'} |
value | '' |
/var/www/ovalik.com/env/lib/python3.9/site-packages/django/db/models/sql/query.py
, line 1242, in build_lookup
# and do an Exact lookup against it.
lhs = self.try_transform(lhs, lookup_name)
lookup_name = "exact"
lookup_class = lhs.get_lookup(lookup_name)
if not lookup_class:
return
lookup = lookup_class(lhs, rhs)…
# Interpret '__exact=None' as the sql 'is NULL'; otherwise, reject all
# uses of None as a query value unless the lookup supports it.
if lookup.rhs is None and not lookup.can_use_none_as_rhs:
if lookup_name not in ("exact", "iexact"):
raise ValueError("Cannot use None as a query value")
return lhs.get_lookup("isnull")(lhs, True)
Variable | Value |
---|---|
lhs | Col(website_cart, website.Cart.key) |
lookup_class | <class 'django.db.models.lookups.Exact'> |
lookup_name | 'exact' |
lookups | [] |
rhs | '' |
self | <django.db.models.sql.query.Query object at 0x7fcfe039c460> |
transforms | [] |
/var/www/ovalik.com/env/lib/python3.9/site-packages/django/db/models/lookups.py
, line 27, in __init__
class Lookup(Expression):
lookup_name = None
prepare_rhs = True
can_use_none_as_rhs = False
def __init__(self, lhs, rhs):
self.lhs, self.rhs = lhs, rhs
self.rhs = self.get_prep_lookup()…
self.lhs = self.get_prep_lhs()
if hasattr(self.lhs, "get_bilateral_transforms"):
bilateral_transforms = self.lhs.get_bilateral_transforms()
else:
bilateral_transforms = []
if bilateral_transforms:
Variable | Value |
---|---|
lhs | Col(website_cart, website.Cart.key) |
rhs | '' |
self | Exact(Col(website_cart, website.Cart.key), '') |
/var/www/ovalik.com/env/lib/python3.9/site-packages/django/db/models/lookups.py
, line 85, in get_prep_lookup
self.lhs, self.rhs = new_exprs
def get_prep_lookup(self):
if not self.prepare_rhs or hasattr(self.rhs, "resolve_expression"):
return self.rhs
if hasattr(self.lhs, "output_field"):
if hasattr(self.lhs.output_field, "get_prep_value"):
return self.lhs.output_field.get_prep_value(self.rhs)…
elif self.rhs_is_direct_value():
return Value(self.rhs)
return self.rhs
def get_prep_lhs(self):
if hasattr(self.lhs, "resolve_expression"):
Variable | Value |
---|---|
self | Exact(Col(website_cart, website.Cart.key), '') |
/var/www/ovalik.com/env/lib/python3.9/site-packages/django/db/models/fields/__init__.py
, line 1990, in get_prep_value
def get_prep_value(self, value):
value = super().get_prep_value(value)
if value is None:
return None
try:
return int(value)
except (TypeError, ValueError) as e:
raise e.__class__(…
"Field '%s' expected a number but got %r." % (self.name, value),
) from e
def get_internal_type(self):
return "IntegerField"
Variable | Value |
---|---|
__class__ | <class 'django.db.models.fields.IntegerField'> |
self | <django.db.models.fields.IntegerField: key> |
value | '' |
AnonymousUser
Variable | Value |
---|---|
edit_pub_product | 'y' |
edit_pub | '91' |
edit_product | '278' |
No POST data
No FILES data
No cookie data
Variable | Value |
---|---|
HTTP_ACCEPT | '*/*' |
HTTP_CONNECTION | 'close' |
HTTP_HOST | 'ovalik.com' |
HTTP_USER_AGENT | 'claudebot' |
HTTP_X_FORWARDED_FOR | '44.220.59.236' |
HTTP_X_FORWARDED_PROTO | 'https' |
HTTP_X_REAL_IP | '44.220.59.236' |
PATH_INFO | '/catalog/product/278' |
QUERY_STRING | 'edit_pub_product=y&edit_pub=91&edit_product=278' |
RAW_URI | '/catalog/product/278?edit_pub_product=y&edit_pub=91&edit_product=278' |
REMOTE_ADDR | '' |
REQUEST_METHOD | 'GET' |
SCRIPT_NAME | '' |
SERVER_NAME | 'ovalik.com' |
SERVER_PORT | '443' |
SERVER_PROTOCOL | 'HTTP/1.0' |
SERVER_SOFTWARE | 'gunicorn/20.1.0' |
gunicorn.socket | <socket.socket fd=5, family=AddressFamily.AF_UNIX, type=SocketKind.SOCK_STREAM, proto=0, laddr=/run/gunicornprod.sock> |
wsgi.errors | <gunicorn.http.wsgi.WSGIErrorsWrapper object at 0x7fcfe0c40040> |
wsgi.file_wrapper | <class 'gunicorn.http.wsgi.FileWrapper'> |
wsgi.input | <gunicorn.http.body.Body object at 0x7fcfe0c40880> |
wsgi.input_terminated | True |
wsgi.multiprocess | True |
wsgi.multithread | True |
wsgi.run_once | False |
wsgi.url_scheme | 'https' |
wsgi.version | (1, 0) |
app.settings
Setting | Value |
---|---|
ABSOLUTE_URL_OVERRIDES | {} |
ADMINS | [] |
ADMIN_EMAIL | 'info@ovalik.com' |
ALLOWED_HOSTS | ['ovalik.com'] |
APPEND_SLASH | True |
AUTHENTICATION_BACKENDS | ['django.contrib.auth.backends.ModelBackend'] |
AUTH_PASSWORD_VALIDATORS | '********************' |
AUTH_USER_MODEL | 'auth.User' |
BASE_DIR | '/var/www/ovalik.com' |
BASE_URL | 'https://ovalik.com' |
CACHES | {'default': {'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache', 'LOCATION': '/var/www/ovalik.com/cache'}} |
CACHE_MIDDLEWARE_ALIAS | 'default' |
CACHE_MIDDLEWARE_KEY_PREFIX | '********************' |
CACHE_MIDDLEWARE_SECONDS | 600 |
COMPRESSORS | {'css': 'compressor.css.CssCompressor', 'js': 'compressor.js.JsCompressor'} |
COMPRESS_CACHEABLE_PRECOMPILERS | () |
COMPRESS_CACHE_BACKEND | 'default' |
COMPRESS_CACHE_KEY_FUNCTION | '********************' |
COMPRESS_CLEAN_CSS_ARGUMENTS | '' |
COMPRESS_CLEAN_CSS_BINARY | 'cleancss' |
COMPRESS_CLOSURE_COMPILER_ARGUMENTS | '' |
COMPRESS_CLOSURE_COMPILER_BINARY | 'java -jar compiler.jar' |
COMPRESS_CSS_HASHING_METHOD | 'mtime' |
COMPRESS_DATA_URI_MAX_SIZE | 1024 |
COMPRESS_DEBUG_TOGGLE | None |
COMPRESS_ENABLED | True |
COMPRESS_FILTERS | {'css': ['compressor.filters.css_default.CssAbsoluteFilter', 'compressor.filters.cssmin.rCSSMinFilter'], 'js': ['compressor.filters.jsmin.rJSMinFilter']} |
COMPRESS_JINJA2_GET_ENVIRONMENT | <function CompressorConf.JINJA2_GET_ENVIRONMENT at 0x7fcfe22eba60> |
COMPRESS_MINT_DELAY | 30 |
COMPRESS_MTIME_DELAY | 10 |
COMPRESS_OFFLINE | True |
COMPRESS_OFFLINE_CONTEXT | {'STATIC_URL': '/static/'} |
COMPRESS_OFFLINE_MANIFEST | 'manifest.json' |
COMPRESS_OFFLINE_MANIFEST_STORAGE | 'compressor.storage.OfflineManifestFileStorage' |
COMPRESS_OFFLINE_TIMEOUT | 31536000 |
COMPRESS_OUTPUT_DIR | 'CACHE' |
COMPRESS_PARSER | 'compressor.parser.AutoSelectParser' |
COMPRESS_PRECOMPILERS | () |
COMPRESS_REBUILD_TIMEOUT | 2592000 |
COMPRESS_ROOT | '/var/www/ovalik.com/static' |
COMPRESS_STORAGE | 'compressor.storage.CompressorFileStorage' |
COMPRESS_TEMPLATE_FILTER_CONTEXT | {'STATIC_URL': '/static/'} |
COMPRESS_URL | '/static/' |
COMPRESS_URL_PLACEHOLDER | '/__compressor_url_placeholder__/' |
COMPRESS_VERBOSE | False |
COMPRESS_YUGLIFY_BINARY | 'yuglify' |
COMPRESS_YUGLIFY_CSS_ARGUMENTS | '--terminal' |
COMPRESS_YUGLIFY_JS_ARGUMENTS | '--terminal' |
COMPRESS_YUI_BINARY | 'java -jar yuicompressor.jar' |
COMPRESS_YUI_CSS_ARGUMENTS | '' |
COMPRESS_YUI_JS_ARGUMENTS | '' |
COUNT_DAY_PLUS | 0 |
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 |
DATABASES | {'default': {'ATOMIC_REQUESTS': False, 'AUTOCOMMIT': True, 'CONN_MAX_AGE': None, 'ENGINE': 'django.db.backends.postgresql', 'HOST': '127.0.0.1', 'NAME': 'ovalik', 'OPTIONS': {}, 'PASSWORD': '********************', 'PORT': '5432', 'TEST': {'CHARSET': None, 'COLLATION': None, 'MIGRATE': True, 'MIRROR': None, 'NAME': None}, 'TIME_ZONE': None, 'USER': 'ovalik'}} |
DATABASE_ROUTERS | [] |
DATA_UPLOAD_MAX_MEMORY_SIZE | 2621440 |
DATA_UPLOAD_MAX_NUMBER_FIELDS | 1000 |
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.AutoField' |
DEFAULT_CHARSET | 'utf-8' |
DEFAULT_EXCEPTION_REPORTER | 'django.views.debug.ExceptionReporter' |
DEFAULT_EXCEPTION_REPORTER_FILTER | 'django.views.debug.SafeExceptionReporterFilter' |
DEFAULT_FILE_STORAGE | 'django.core.files.storage.FileSystemStorage' |
DEFAULT_FROM_EMAIL | 'info@ovalik.com' |
DEFAULT_INDEX_TABLESPACE | '' |
DEFAULT_TABLESPACE | '' |
DISALLOWED_USER_AGENTS | [] |
EMAIL_BACKEND | 'django.core.mail.backends.smtp.EmailBackend' |
EMAIL_FILE_PATH | '/var/www/ovalik.com/temp' |
EMAIL_HOST | 'smtp.yandex.ru' |
EMAIL_HOST_PASSWORD | '********************' |
EMAIL_HOST_USER | 'info@ovalik.com' |
EMAIL_PORT | 465 |
EMAIL_SSL_CERTFILE | None |
EMAIL_SSL_KEYFILE | '********************' |
EMAIL_SUBJECT_PREFIX | '[Django] ' |
EMAIL_TIMEOUT | None |
EMAIL_USE_LOCALTIME | False |
EMAIL_USE_SSL | True |
EMAIL_USE_TLS | False |
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 | 420 |
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' |
HOST | 'ovalik.com' |
IGNORABLE_404_URLS | [] |
INSTALLED_APPS | ['django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'letsencrypt', 'mptt', 'website', 'manager', 'compressor'] |
INTERNAL_IPS | [] |
LANGUAGES | [('af', 'Afrikaans'), ('ar', 'Arabic'), ('ar-dz', 'Algerian Arabic'), ('ast', 'Asturian'), ('az', 'Azerbaijani'), ('bg', 'Bulgarian'), ('be', 'Belarusian'), ('bn', 'Bengali'), ('br', 'Breton'), ('bs', 'Bosnian'), ('ca', 'Catalan'), ('cs', 'Czech'), ('cy', 'Welsh'), ('da', 'Danish'), ('de', 'German'), ('dsb', 'Lower Sorbian'), ('el', 'Greek'), ('en', 'English'), ('en-au', 'Australian English'), ('en-gb', 'British English'), ('eo', 'Esperanto'), ('es', 'Spanish'), ('es-ar', 'Argentinian Spanish'), ('es-co', 'Colombian Spanish'), ('es-mx', 'Mexican Spanish'), ('es-ni', 'Nicaraguan Spanish'), ('es-ve', 'Venezuelan Spanish'), ('et', 'Estonian'), ('eu', 'Basque'), ('fa', 'Persian'), ('fi', 'Finnish'), ('fr', 'French'), ('fy', 'Frisian'), ('ga', 'Irish'), ('gd', 'Scottish Gaelic'), ('gl', 'Galician'), ('he', 'Hebrew'), ('hi', 'Hindi'), ('hr', 'Croatian'), ('hsb', 'Upper Sorbian'), ('hu', 'Hungarian'), ('hy', 'Armenian'), ('ia', 'Interlingua'), ('id', 'Indonesian'), ('ig', 'Igbo'), ('io', 'Ido'), ('is', 'Icelandic'), ('it', 'Italian'), ('ja', 'Japanese'), ('ka', 'Georgian'), ('kab', 'Kabyle'), ('kk', 'Kazakh'), ('km', 'Khmer'), ('kn', 'Kannada'), ('ko', 'Korean'), ('ky', 'Kyrgyz'), ('lb', 'Luxembourgish'), ('lt', 'Lithuanian'), ('lv', 'Latvian'), ('mk', 'Macedonian'), ('ml', 'Malayalam'), ('mn', 'Mongolian'), ('mr', 'Marathi'), ('ms', 'Malay'), ('my', 'Burmese'), ('nb', 'Norwegian Bokmål'), ('ne', 'Nepali'), ('nl', 'Dutch'), ('nn', 'Norwegian Nynorsk'), ('os', 'Ossetic'), ('pa', 'Punjabi'), ('pl', 'Polish'), ('pt', 'Portuguese'), ('pt-br', 'Brazilian Portuguese'), ('ro', 'Romanian'), ('ru', 'Russian'), ('sk', 'Slovak'), ('sl', 'Slovenian'), ('sq', 'Albanian'), ('sr', 'Serbian'), ('sr-latn', 'Serbian Latin'), ('sv', 'Swedish'), ('sw', 'Swahili'), ('ta', 'Tamil'), ('te', 'Telugu'), ('tg', 'Tajik'), ('th', 'Thai'), ('tk', 'Turkmen'), ('tr', 'Turkish'), ('tt', 'Tatar'), ('udm', 'Udmurt'), ('uk', 'Ukrainian'), ('ur', 'Urdu'), ('uz', 'Uzbek'), ('vi', 'Vietnamese'), ('zh-hans', 'Simplified Chinese'), ('zh-hant', 'Traditional Chinese')] |
LANGUAGES_BIDI | ['he', 'ar', 'ar-dz', 'fa', 'ur'] |
LANGUAGE_CODE | 'ru' |
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 | [] |
LOGGING | {} |
LOGGING_CONFIG | 'logging.config.dictConfig' |
LOGIN_REDIRECT_URL | '/accounts/profile/' |
LOGIN_URL | '/accounts/login/' |
LOGOUT_REDIRECT_URL | None |
MANAGERS | [] |
MEDIA_ROOT | '/var/www/ovalik.com/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.contrib.auth.middleware.AuthenticationMiddleware'] |
MIGRATION_MODULES | {} |
MONTH_DAY_FORMAT | 'F j' |
NUMBER_GROUPING | 0 |
PASSWORD_HASHERS | '********************' |
PASSWORD_RESET_TIMEOUT | '********************' |
PREPEND_WWW | False |
ROOT_URLCONF | 'app.urls' |
SBP_CHEQUE_LINK | 'https://sbp.ovalik.com/dev/cheque/v1/create' |
SBP_INTERVAL_STATUS_QR_MS | 2000 |
SBP_PAY_LINK | 'https://sbp.ovalik.com/dev/pay/qr/sbp/v1/create' |
SBP_REFUND_PAY_LINK | 'https://sbp.ovalik.com/dev/pay/qr/sbp/v1/cancel' |
SBP_STATUS_PAY_LINK | 'https://sbp.ovalik.com/dev/pay/qr/sbp/v1/status' |
SBP_TIMEOUT_JS_QR_MS | 90000 |
SBP_TIMEOUT_QR_MS | 300000 |
SECRET_KEY | '********************' |
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 | ('HTTP_X_FORWARDED_PROTO', 'https') |
SECURE_REDIRECT_EXEMPT | [] |
SECURE_REFERRER_POLICY | 'same-origin' |
SECURE_SSL_HOST | None |
SECURE_SSL_REDIRECT | True |
SERVER_EMAIL | 'info@ovalik.com' |
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.file' |
SESSION_EXPIRE_AT_BROWSER_CLOSE | False |
SESSION_FILE_PATH | '/var/www/ovalik.com/temp' |
SESSION_SAVE_EVERY_REQUEST | False |
SESSION_SERIALIZER | 'django.contrib.sessions.serializers.JSONSerializer' |
SETTINGS_MODULE | 'app.settings' |
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', 'compressor.finders.CompressorFinder'] |
STATICFILES_STORAGE | 'django.contrib.staticfiles.storage.StaticFilesStorage' |
STATIC_ROOT | '/var/www/ovalik.com/static' |
STATIC_URL | '/static/' |
TEMPLATES | [{'APP_DIRS': True, 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': ['/var/www/ovalik.com/templates'], 'OPTIONS': {'context_processors': ['django.template.context_processors.request', 'django.contrib.auth.context_processors.auth']}}] |
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 | 'Europe/Samara' |
UPLOADS_ROOT | '/var/www/ovalik.com/uploads' |
UPLOADS_URL | '/uploads/' |
USE_DEPRECATED_PYTZ | False |
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 | 'app.wsgi.application' |
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.