Skip to content

Filter by tag doesn't work #3826

@jstrvr

Description

@jstrvr

Issue

Hi Benedikt, thanks for all the hard work on Tandoor! I'm currently trying to filter by a tag, however when I click one it looks like this and when I search on it I get a "Fehler beim laden". In Portainer all containers are healthy. Any clues how to fix this? Not sure if it's my I'm running beta 4, moving back to beta 3 didn't make a difference. In the browser console I get https://tandoor.------.synology.me/api/recipe/?keywords=NaN&page=1&page_size=50&query= 500 (Internal Server Error).

Image

Tandoor Version

beta-4

OS Version

DSM 7.2.2-72806 Update 3

Setup

Docker / Docker-Compose

Reverse Proxy

Nginx Proxy Manager (NPM)

Other

No response

Environment file

DEBUG=0
SQL_DEBUG=0
ALLOWED_HOSTS=*
SECRET_KEY=my_secret_key
TZ=Europe/Amsterdam
DB_ENGINE=django.db.backends.postgresql
POSTGRES_HOST=tandoor-db
POSTGRES_PORT=5432
POSTGRES_USER=tandooruser
POSTGRES_PASSWORD=tandoorpass
POSTGRES_DB=tandoor
FRACTION_PREF_DEFAULT=0
COMMENT_PREF_DEFAULT=1
SHOPPING_MIN_AUTOSYNC_INTERVAL=5
GUNICORN_MEDIA=0
REMOTE_USER_AUTH=0
ENABLE_PDF_EXPORT=1
EXPORT_FILE_CACHE_DURATION=600
AI_API_KEY=my_api_key

Docker-Compose file

services:
  db:
    image: postgres:16
    container_name: Tandoor-DB
    hostname: tandoor-db
    security_opt:
      - no-new-privileges:true
    healthcheck:
      test: ["CMD", "pg_isready", "-q", "-d", "tandoor", "-U", "tandooruser"]
      timeout: 45s
      interval: 10s
      retries: 10
    volumes:
      - /volume1/docker/tandoor/db:/var/lib/postgresql/data
    env_file:
      - stack.env
    restart: always
    

  tandoor:
    image: vabene1111/recipes:2.0.0-beta-4
    container_name: Tandoor
    hostname: tandoor
    security_opt:
      - no-new-privileges:true
    healthcheck:
      test: wget --no-verbose --tries=1 --spider http://localhost:8080 || exit 1
    volumes:
      - /volume1/docker/tandoor/staticfiles:/opt/recipes/staticfiles:rw
      - /volume1/docker/tandoor/mediafiles:/opt/recipes/mediafiles:rw
      - /volume1/docker/tandoor/nginx:/opt/recipes/nginx/conf.d:rw
    env_file:
      - stack.env
    restart: always
    depends_on:
      - db

  nginx:
    image: nginx:mainline-alpine
    container_name: Tandoor-NGINX
    hostname: nginx-tandoor
    security_opt:
      - no-new-privileges:true
    healthcheck:
      test: wget --no-verbose --tries=1 --spider http://localhost:80 || exit 1
    volumes:
      - /volume1/docker/tandoor/staticfiles:/static:ro
      - /volume1/docker/tandoor/mediafiles:/media:ro
      - /volume1/docker/tandoor/nginx:/etc/nginx/conf.d:ro
    ports:
      - 9815:80
    env_file:
      - stack.env
    restart: always
    depends_on:
      - tandoor

Relevant logs

::ffff:192.168.64.4 - - [14/Jul/2025:10:50:53 +0200] "GET /api/keyword/?page=1&page_size=25&query= HTTP/1.0" 200 5503 "https://tandoor.opticon2.synology.me/advanced-search" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36"\
ThreadPoolExecutor-0_0 ERROR 2025-07-14 10:50:57,468 django.request Internal Server Error: /api/recipe/\
Traceback (most recent call last):\
  File "/opt/recipes/venv/lib/python3.13/site-packages/django/db/models/fields/__init__.py", line 2053, in get_prep_value\
    return int(value)\
ValueError: invalid literal for int() with base 10: 'NaN'\
The above exception was the direct cause of the following exception:\
Traceback (most recent call last):\
  File "/opt/recipes/venv/lib/python3.13/site-packages/django/core/handlers/exception.py", line 55, in inner\
    response = get_response(request)\
  File "/opt/recipes/venv/lib/python3.13/site-packages/django/core/handlers/base.py", line 197, in _get_response\
    response = wrapped_callback(request, *callback_args, **callback_kwargs)\
  File "/opt/recipes/venv/lib/python3.13/site-packages/django/views/decorators/csrf.py", line 56, in wrapper_view\
    return view_func(*args, **kwargs)\
  File "/opt/recipes/venv/lib/python3.13/site-packages/rest_framework/viewsets.py", line 124, in view\
    return self.dispatch(request, *args, **kwargs)\
           ~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^\
  File "/opt/recipes/venv/lib/python3.13/site-packages/rest_framework/views.py", line 509, in dispatch\
    response = self.handle_exception(exc)\
  File "/opt/recipes/venv/lib/python3.13/site-packages/rest_framework/views.py", line 469, in handle_exception\
    self.raise_uncaught_exception(exc)\
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^\
  File "/opt/recipes/venv/lib/python3.13/site-packages/rest_framework/views.py", line 480, in raise_uncaught_exception\
    raise exc\
  File "/opt/recipes/venv/lib/python3.13/site-packages/rest_framework/views.py", line 506, in dispatch\
    response = handler(request, *args, **kwargs)\
  File "/opt/recipes/cookbook/views/api.py", line 1253, in list\
    return super().list(request, *args, **kwargs)\
           ~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^\
::ffff:192.168.64.4 - - [14/Jul/2025:10:50:57 +0200] "GET /api/recipe/?keywords=NaN&page=1&page_size=50&query= HTTP/1.0" 500 145 "https://tandoor.opticon2.synology.me/advanced-search?keywords=[object+Object]" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36"\
  File "/opt/recipes/venv/lib/python3.13/site-packages/rest_framework/mixins.py", line 38, in list\
    queryset = self.filter_queryset(self.get_queryset())\
                                    ~~~~~~~~~~~~~~~~~^^\
  File "/opt/recipes/cookbook/views/api.py", line 1247, in get_queryset\
    self.queryset = search.get_queryset(self.queryset).prefetch_related('keywords', 'cooklog_set')\
                    ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^\
  File "/opt/recipes/cookbook/helper/recipe_search.py", line 162, in get_queryset\
    self.keyword_filters(**self._keywords)\
    ~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^\
  File "/opt/recipes/cookbook/helper/recipe_search.py", line 357, in keyword_filters\
    keywords = Keyword.objects.filter(pk__in=kwargs[kw_filter])\
  File "/opt/recipes/venv/lib/python3.13/site-packages/django/db/models/manager.py", line 87, in manager_method\
    return getattr(self.get_queryset(), name)(*args, **kwargs)\
           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^\
  File "/opt/recipes/venv/lib/python3.13/site-packages/django/db/models/query.py", line 1436, in filter\
    return self._filter_or_exclude(False, args, kwargs)\
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^\
  File "/opt/recipes/venv/lib/python3.13/site-packages/django/db/models/query.py", line 1454, in _filter_or_exclude\
    clone._filter_or_exclude_inplace(negate, args, kwargs)\
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^\
  File "/opt/recipes/venv/lib/python3.13/site-packages/django/db/models/query.py", line 1461, in _filter_or_exclude_inplace\
    self._query.add_q(Q(*args, **kwargs))\
    ~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^\
  File "/opt/recipes/venv/lib/python3.13/site-packages/django/db/models/sql/query.py", line 1546, in add_q\
    clause, _ = self._add_q(q_object, self.used_aliases)\
                ~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\
  File "/opt/recipes/venv/lib/python3.13/site-packages/django/db/models/sql/query.py", line 1577, in _add_q\
    child_clause, needed_inner = self.build_filter(\
                                 ~~~~~~~~~~~~~~~~~^\
        child,\
        ^^^^^^\
    ...<6 lines>...\
        summarize=summarize,\
        ^^^^^^^^^^^^^^^^^^^^\
    )\
    ^\
  File "/opt/recipes/venv/lib/python3.13/site-packages/django/db/models/sql/query.py", line 1492, in build_filter\
    condition = self.build_lookup(lookups, col, value)\
  File "/opt/recipes/venv/lib/python3.13/site-packages/django/db/models/sql/query.py", line 1319, in build_lookup\
    lookup = lookup_class(lhs, rhs)\
  File "/opt/recipes/venv/lib/python3.13/site-packages/django/db/models/lookups.py", line 27, in __init__\
    self.rhs = self.get_prep_lookup()\
               ~~~~~~~~~~~~~~~~~~~~^^\
  File "/opt/recipes/venv/lib/python3.13/site-packages/django/db/models/lookups.py", line 426, in get_prep_lookup\
    return super().get_prep_lookup()\
           ~~~~~~~~~~~~~~~~~~~~~~~^^\
  File "/opt/recipes/venv/lib/python3.13/site-packages/django/db/models/lookups.py", line 276, in get_prep_lookup\
    rhs_value = self.lhs.output_field.get_prep_value(rhs_value)\
  File "/opt/recipes/venv/lib/python3.13/site-packages/django/db/models/fields/__init__.py", line 2055, in get_prep_value\
    raise e.__class__(\
        "Field '%s' expected a number but got %r." % (self.name, value),\
�\
    ) from e\
ValueError: Field 'id' expected a number but got 'NaN'.\
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    setup issuepossibly or definitely an issue with the user setup

    Type

    No type

    Projects

    Status

    Done

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions