Giter Site home page Giter Site logo

Comments (16)

NightSkySK avatar NightSkySK commented on May 20, 2024 1

@aminalaee It is not much, but at least that I can do to support great job which you've done so far. I wish to become long term supporter of this project, but I first need to make some agreements.

from sqladmin.

NightSkySK avatar NightSkySK commented on May 20, 2024 1

I fixed my code, and all working well, so issue was in my code not in the prepared new functionality.

from sqladmin.

aminalaee avatar aminalaee commented on May 20, 2024 1

yeah sure, you can use string values like the one mentioned here: https://github.com/aminalaee/sqladmin/blob/main/docs/configurations.md#details-page

So for example, if a User has a relationship Address and Address has a zip_code:

class UserAdmin(ModelAdmin, model=User):
    column_details_list = ["address.zip_code"]

from sqladmin.

aminalaee avatar aminalaee commented on May 20, 2024

location is not a column on the Storage model. You have location_uuid as a column which you can use.

But if you want to use another Location field for example name, that's not supported yet.

from sqladmin.

aminalaee avatar aminalaee commented on May 20, 2024

Thank you @NightSkySK for the pledge, it's very nice. I will get to this issue next week.

from sqladmin.

aminalaee avatar aminalaee commented on May 20, 2024

That's very nice πŸ‘

from sqladmin.

Arutemu64 avatar Arutemu64 commented on May 20, 2024

Looks like I'm having the same issue when trying to sort by column_property. Is it related or not?

votes_count = column_property(
        select(func.count())
        .where(Vote.participant_id == id)
        .correlate_except(Vote)
        .scalar_subquery(),
)
CompileError: Can't resolve label reference for ORDER BY / GROUP BY / DISTINCT etc. Textual SQL expression 'votes_count' should be explicitly declared as text('votes_count')

from sqladmin.

aminalaee avatar aminalaee commented on May 20, 2024

This should now be possible on master, would really help if it's also tested before release.

from sqladmin.

NightSkySK avatar NightSkySK commented on May 20, 2024

Using related model fields in list and detailes page works for me.
Search by related model field causing error:

ProgrammingError: (psycopg2.errors.DuplicateAlias) table name "storage" specified more than once
INFO:     127.0.0.1:52836 - "GET /password/list?search=sn HTTP/1.1" 500 Internal Server Error
ERROR:    Exception in ASGI application
Traceback (most recent call last):
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\sqlalchemy\engine\base.py", line 1969, in _exec_single_context
    self.dialect.do_execute(
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\sqlalchemy\engine\default.py", line 922, in do_execute
    cursor.execute(statement, parameters)
psycopg2.errors.DuplicateAlias: table name "storage" specified more than once


The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\uvicorn\protocols\http\h11_impl.py", line 408, in run_asgi
    result = await app(  # type: ignore[func-returns-value]
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\uvicorn\middleware\proxy_headers.py", line 84, in __call__
    return await self.app(scope, receive, send)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\fastapi\applications.py", line 1115, in __call__
    await super().__call__(scope, receive, send)
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\starlette\applications.py", line 122, in __call__
    await self.middleware_stack(scope, receive, send)
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\starlette\middleware\errors.py", line 184, in __call__
    raise exc
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\starlette\middleware\errors.py", line 162, in __call__
    await self.app(scope, receive, _send)
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\starlette\middleware\exceptions.py", line 79, in __call__
    raise exc
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\starlette\middleware\exceptions.py", line 68, in __call__
    await self.app(scope, receive, sender)
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\fastapi\middleware\asyncexitstack.py", line 20, in __call__
    raise e
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\fastapi\middleware\asyncexitstack.py", line 17, in __call__
    await self.app(scope, receive, send)
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\starlette\routing.py", line 718, in __call__
    await route.handle(scope, receive, send)
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\starlette\routing.py", line 443, in handle
    await self.app(scope, receive, send)
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\starlette\applications.py", line 122, in __call__
    await self.middleware_stack(scope, receive, send)
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\starlette\middleware\errors.py", line 184, in __call__
    raise exc
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\starlette\middleware\errors.py", line 162, in __call__
    await self.app(scope, receive, _send)
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\starlette\middleware\sessions.py", line 86, in __call__
    await self.app(scope, receive, send_wrapper)
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\starlette\middleware\exceptions.py", line 79, in __call__
    raise exc
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\starlette\middleware\exceptions.py", line 68, in __call__
    await self.app(scope, receive, sender)
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\starlette\routing.py", line 718, in __call__
    await route.handle(scope, receive, send)
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\starlette\routing.py", line 276, in handle
    await self.app(scope, receive, send)
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\starlette\routing.py", line 66, in app
    response = await func(request)
               ^^^^^^^^^^^^^^^^^^^
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\sqladmin\authentication.py", line 66, in wrapper_decorator
    return await func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\sqladmin\application.py", line 434, in list
    pagination = await model_view.list(request)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\sqladmin\models.py", line 768, in list
    count = await self.count(request, select(func.count()).select_from(stmt))
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\sqladmin\models.py", line 751, in count
    rows = await self._run_query(stmt)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\sqladmin\models.py", line 704, in _run_query
    return await anyio.to_thread.run_sync(self._run_query_sync, stmt)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\anyio\to_thread.py", line 33, in run_sync
    return await get_asynclib().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\anyio\_backends\_asyncio.py", line 877, in run_sync_in_worker_thread
    return await future
           ^^^^^^^^^^^^
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\anyio\_backends\_asyncio.py", line 807, in run
    result = context.run(func, *args)
             ^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\sqladmin\models.py", line 695, in _run_query_sync
    result = session.execute(stmt)
             ^^^^^^^^^^^^^^^^^^^^^
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\sqlalchemy\orm\session.py", line 2306, in execute
    return self._execute_internal(
           ^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\sqlalchemy\orm\session.py", line 2188, in _execute_internal
    result: Result[Any] = compile_state_cls.orm_execute_statement(
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\sqlalchemy\orm\context.py", line 293, in orm_execute_statement
    result = conn.execute(
             ^^^^^^^^^^^^^
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\sqlalchemy\engine\base.py", line 1416, in execute
    return meth(
           ^^^^^
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\sqlalchemy\sql\elements.py", line 516, in _execute_on_connection
    return connection._execute_clauseelement(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\sqlalchemy\engine\base.py", line 1639, in _execute_clauseelement
    ret = self._execute_context(
          ^^^^^^^^^^^^^^^^^^^^^^
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\sqlalchemy\engine\base.py", line 1848, in _execute_context
    return self._exec_single_context(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\sqlalchemy\engine\base.py", line 1988, in _exec_single_context
    self._handle_dbapi_exception(
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\sqlalchemy\engine\base.py", line 2343, in _handle_dbapi_exception
    raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\sqlalchemy\engine\base.py", line 1969, in _exec_single_context
    self.dialect.do_execute(
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\sqlalchemy\engine\default.py", line 922, in do_execute
    cursor.execute(statement, parameters)
sqlalchemy.exc.ProgrammingError: (psycopg2.errors.DuplicateAlias) table name "storage" specified more than once

[SQL: SELECT count(*) AS count_1
FROM (SELECT password.password_uuid AS password_uuid, password.storage_uuid AS storage_uuid, password.hashed_password AS hashed_password, password.valid_until AS valid_until
FROM password JOIN storage ON storage.storage_uuid = password.storage_uuid JOIN storage ON storage.storage_uuid = password.storage_uuid, mspacelock, location
WHERE CAST(password.password_uuid AS VARCHAR) ILIKE %(param_1)s OR CAST(storage.storage_uuid = password.storage_uuid AS VARCHAR) ILIKE %(param_2)s OR CAST(storage.storage_uuid = mspacelock.storage_uuid AS VARCHAR) ILIKE %(param_3)s OR CAST(location.location_uuid = storage.location_uuid AS VARCHAR) ILIKE %(param_4)s ORDER BY password.password_uuid ASC) AS anon_1]
[parameters: {'param_1': '%sn%', 'param_2': '%sn%', 'param_3': '%sn%', 'param_4': '%sn%'}]
(Background on this error at: https://sqlalche.me/e/20/f405)
class PasswordView(ModelView, model=Password):
    column_list = [
        Password.password_uuid,
        Password.storages,
        "storages.mspacelock",
        "storages.location",
        Password.hashed_password,
        Password.valid_until,
    ]
    column_searchable_list = [
        Password.password_uuid,
        Password.storages,
        "storages.mspacelock",
        "storages.location",
    ]

from sqladmin.

NightSkySK avatar NightSkySK commented on May 20, 2024

Sorting also causing some errors:

INFO: 127.0.0.1:53263 - "GET /password/list?sortBy=storages.location&sort=asc HTTP/1.1" 500 Internal Server Error
ERROR:    Exception in ASGI application
Traceback (most recent call last):
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\sqlalchemy\engine\base.py", line 1969, in _exec_single_context
    self.dialect.do_execute(
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\sqlalchemy\engine\default.py", line 922, in do_execute
    cursor.execute(statement, parameters)
psycopg2.errors.UndefinedTable: missing FROM-clause entry for table "location"
LINE 2: ...e_1.storage_uuid = password.storage_uuid ORDER BY location.l...
                                                             ^


The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\uvicorn\protocols\http\h11_impl.py", line 408, in run_asgi
    result = await app(  # type: ignore[func-returns-value]
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\uvicorn\middleware\proxy_headers.py", line 84, in __call__
    return await self.app(scope, receive, send)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\fastapi\applications.py", line 1115, in __call__
    await super().__call__(scope, receive, send)
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\starlette\applications.py", line 122, in __call__
    await self.middleware_stack(scope, receive, send)
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\starlette\middleware\errors.py", line 184, in __call__
    raise exc
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\starlette\middleware\errors.py", line 162, in __call__
    await self.app(scope, receive, _send)
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\starlette\middleware\exceptions.py", line 79, in __call__
    raise exc
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\starlette\middleware\exceptions.py", line 68, in __call__
    await self.app(scope, receive, sender)
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\fastapi\middleware\asyncexitstack.py", line 20, in __call__
    raise e
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\fastapi\middleware\asyncexitstack.py", line 17, in __call__
    await self.app(scope, receive, send)
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\starlette\routing.py", line 718, in __call__
    await route.handle(scope, receive, send)
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\starlette\routing.py", line 443, in handle
    await self.app(scope, receive, send)
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\starlette\applications.py", line 122, in __call__
    await self.middleware_stack(scope, receive, send)
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\starlette\middleware\errors.py", line 184, in __call__
    raise exc
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\starlette\middleware\errors.py", line 162, in __call__
    await self.app(scope, receive, _send)
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\starlette\middleware\sessions.py", line 86, in __call__
    await self.app(scope, receive, send_wrapper)
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\starlette\middleware\exceptions.py", line 79, in __call__
    raise exc
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\starlette\middleware\exceptions.py", line 68, in __call__
    await self.app(scope, receive, sender)
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\starlette\routing.py", line 718, in __call__
    await route.handle(scope, receive, send)
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\starlette\routing.py", line 276, in handle
    await self.app(scope, receive, send)
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\starlette\routing.py", line 66, in app
    response = await func(request)
               ^^^^^^^^^^^^^^^^^^^
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\sqladmin\authentication.py", line 66, in wrapper_decorator
    return await func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\sqladmin\application.py", line 434, in list
    pagination = await model_view.list(request)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\sqladmin\models.py", line 773, in list
    rows = await self._run_query(stmt)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\sqladmin\models.py", line 704, in _run_query
    return await anyio.to_thread.run_sync(self._run_query_sync, stmt)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\anyio\to_thread.py", line 33, in run_sync
    return await get_asynclib().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\anyio\_backends\_asyncio.py", line 877, in run_sync_in_worker_thread
    return await future
           ^^^^^^^^^^^^
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\anyio\_backends\_asyncio.py", line 807, in run
    result = context.run(func, *args)
             ^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\sqladmin\models.py", line 695, in _run_query_sync
    result = session.execute(stmt)
             ^^^^^^^^^^^^^^^^^^^^^
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\sqlalchemy\orm\session.py", line 2306, in execute
    return self._execute_internal(
           ^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\sqlalchemy\orm\session.py", line 2188, in _execute_internal
    result: Result[Any] = compile_state_cls.orm_execute_statement(
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\sqlalchemy\orm\context.py", line 293, in orm_execute_statement
    result = conn.execute(
             ^^^^^^^^^^^^^
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\sqlalchemy\engine\base.py", line 1416, in execute
    return meth(
           ^^^^^
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\sqlalchemy\sql\elements.py", line 516, in _execute_on_connection
    return connection._execute_clauseelement(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\sqlalchemy\engine\base.py", line 1639, in _execute_clauseelement
    ret = self._execute_context(
          ^^^^^^^^^^^^^^^^^^^^^^
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\sqlalchemy\engine\base.py", line 1848, in _execute_context
    return self._exec_single_context(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\sqlalchemy\engine\base.py", line 1988, in _exec_single_context
    self._handle_dbapi_exception(
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\sqlalchemy\engine\base.py", line 2343, in _handle_dbapi_exception
    raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\sqlalchemy\engine\base.py", line 1969, in _exec_single_context
    self.dialect.do_execute(
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\sqlalchemy\engine\default.py", line 922, in do_execute
    cursor.execute(statement, parameters)
sqlalchemy.exc.ProgrammingError: (psycopg2.errors.UndefinedTable) missing FROM-clause entry for table "location"
LINE 2: ...e_1.storage_uuid = password.storage_uuid ORDER BY location.l...
                                                             ^

[SQL: SELECT password.password_uuid, password.storage_uuid, password.hashed_password, password.valid_until, storage_1.storage_uuid AS storage_uuid_1, storage_1.storage_id, storage_1.is_occupied, storage_1.is_restricted, storage_1.rented_until, storage_1.location_uuid
FROM password JOIN storage ON storage.storage_uuid = password.storage_uuid LEFT OUTER JOIN storage AS storage_1 ON storage_1.storage_uuid = password.storage_uuid ORDER BY location.location_uuid = storage.location_uuid ASC
 LIMIT %(param_1)s OFFSET %(param_2)s]
[parameters: {'param_1': 10, 'param_2': 0}]
(Background on this error at: https://sqlalche.me/e/20/f405)

Another example

INFO: 127.0.0.1:53254 - "GET /password/list?sortBy=storages.mspacelock&sort=asc HTTP/1.1" 500 Internal Server Error
ERROR:    Exception in ASGI application
Traceback (most recent call last):
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\sqlalchemy\engine\base.py", line 1969, in _exec_single_context
    self.dialect.do_execute(
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\sqlalchemy\engine\default.py", line 922, in do_execute
    cursor.execute(statement, parameters)
psycopg2.errors.UndefinedTable: missing FROM-clause entry for table "mspacelock"
LINE 2: ...word.storage_uuid ORDER BY storage.storage_uuid = mspacelock...
                                                             ^


The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\uvicorn\protocols\http\h11_impl.py", line 408, in run_asgi
    result = await app(  # type: ignore[func-returns-value]
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\uvicorn\middleware\proxy_headers.py", line 84, in __call__
    return await self.app(scope, receive, send)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\fastapi\applications.py", line 1115, in __call__
    await super().__call__(scope, receive, send)
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\starlette\applications.py", line 122, in __call__
    await self.middleware_stack(scope, receive, send)
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\starlette\middleware\errors.py", line 184, in __call__
    raise exc
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\starlette\middleware\errors.py", line 162, in __call__
    await self.app(scope, receive, _send)
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\starlette\middleware\exceptions.py", line 79, in __call__
    raise exc
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\starlette\middleware\exceptions.py", line 68, in __call__
    await self.app(scope, receive, sender)
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\fastapi\middleware\asyncexitstack.py", line 20, in __call__
    raise e
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\fastapi\middleware\asyncexitstack.py", line 17, in __call__
    await self.app(scope, receive, send)
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\starlette\routing.py", line 718, in __call__
    await route.handle(scope, receive, send)
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\starlette\routing.py", line 443, in handle
    await self.app(scope, receive, send)
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\starlette\applications.py", line 122, in __call__
    await self.middleware_stack(scope, receive, send)
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\starlette\middleware\errors.py", line 184, in __call__
    raise exc
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\starlette\middleware\errors.py", line 162, in __call__
    await self.app(scope, receive, _send)
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\starlette\middleware\sessions.py", line 86, in __call__
    await self.app(scope, receive, send_wrapper)
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\starlette\middleware\exceptions.py", line 79, in __call__
    raise exc
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\starlette\middleware\exceptions.py", line 68, in __call__
    await self.app(scope, receive, sender)
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\starlette\routing.py", line 718, in __call__
    await route.handle(scope, receive, send)
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\starlette\routing.py", line 276, in handle
    await self.app(scope, receive, send)
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\starlette\routing.py", line 66, in app
    response = await func(request)
               ^^^^^^^^^^^^^^^^^^^
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\sqladmin\authentication.py", line 66, in wrapper_decorator
    return await func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\sqladmin\application.py", line 434, in list
    pagination = await model_view.list(request)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\sqladmin\models.py", line 773, in list
    rows = await self._run_query(stmt)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\sqladmin\models.py", line 704, in _run_query
    return await anyio.to_thread.run_sync(self._run_query_sync, stmt)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\anyio\to_thread.py", line 33, in run_sync
    return await get_asynclib().run_sync_in_worker_thread(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\anyio\_backends\_asyncio.py", line 877, in run_sync_in_worker_thread
    return await future
           ^^^^^^^^^^^^
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\anyio\_backends\_asyncio.py", line 807, in run
    result = context.run(func, *args)
             ^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\sqladmin\models.py", line 695, in _run_query_sync
    result = session.execute(stmt)
             ^^^^^^^^^^^^^^^^^^^^^
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\sqlalchemy\orm\session.py", line 2306, in execute
    return self._execute_internal(
           ^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\sqlalchemy\orm\session.py", line 2188, in _execute_internal
    result: Result[Any] = compile_state_cls.orm_execute_statement(
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\sqlalchemy\orm\context.py", line 293, in orm_execute_statement
    result = conn.execute(
             ^^^^^^^^^^^^^
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\sqlalchemy\engine\base.py", line 1416, in execute
    return meth(
           ^^^^^
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\sqlalchemy\sql\elements.py", line 516, in _execute_on_connection
    return connection._execute_clauseelement(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\sqlalchemy\engine\base.py", line 1639, in _execute_clauseelement
    ret = self._execute_context(
          ^^^^^^^^^^^^^^^^^^^^^^
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\sqlalchemy\engine\base.py", line 1848, in _execute_context
    return self._exec_single_context(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\sqlalchemy\engine\base.py", line 1988, in _exec_single_context
    self._handle_dbapi_exception(
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\sqlalchemy\engine\base.py", line 2343, in _handle_dbapi_exception
    raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\sqlalchemy\engine\base.py", line 1969, in _exec_single_context
    self.dialect.do_execute(
  File "D:\mSpaceLock\mSpaceLock-www\env-sqladmin\Lib\site-packages\sqlalchemy\engine\default.py", line 922, in do_execute
    cursor.execute(statement, parameters)
sqlalchemy.exc.ProgrammingError: (psycopg2.errors.UndefinedTable) missing FROM-clause entry for table "mspacelock"
LINE 2: ...word.storage_uuid ORDER BY storage.storage_uuid = mspacelock...
                                                             ^

[SQL: SELECT password.password_uuid, password.storage_uuid, password.hashed_password, password.valid_until, storage_1.storage_uuid AS storage_uuid_1, storage_1.storage_id, storage_1.is_occupied, storage_1.is_restricted, storage_1.rented_until, storage_1.location_uuid
FROM password JOIN storage ON storage.storage_uuid = password.storage_uuid LEFT OUTER JOIN storage AS storage_1 ON storage_1.storage_uuid = password.storage_uuid ORDER BY storage.storage_uuid = mspacelock.storage_uuid ASC
 LIMIT %(param_1)s OFFSET %(param_2)s]
[parameters: {'param_1': 10, 'param_2': 0}]
(Background on this error at: https://sqlalche.me/e/20/f405)

Or maybe I just using it in an unintended way...

from sqladmin.

aminalaee avatar aminalaee commented on May 20, 2024

I think it would help if you posted a minimal code for your models and their columns, I assume for example Password has multiple Storages so you can’t sort or search by that, it should be by a Storage field, unless I’m wrong.

from sqladmin.

anton-petrov avatar anton-petrov commented on May 20, 2024

I got the same error as @NightSkySK, how was you able to fix this error?
I also need to sort and search in foreign table columns.

from sqladmin.

anton-petrov avatar anton-petrov commented on May 20, 2024

@aminalaee Can't find how to use a new functionality in the documentation.

from sqladmin.

aminalaee avatar aminalaee commented on May 20, 2024

This is not released yet, you can test it out by installing from git, just to test it out.

from sqladmin.

anton-petrov avatar anton-petrov commented on May 20, 2024

Sure, I use version from git

from sqladmin.

anton-petrov avatar anton-petrov commented on May 20, 2024

@aminalaee Hi, so, do you have any instructions, how to use this new functionality with search and sort by foreign columns? Maybe, some example?

from sqladmin.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.