Downstream fixes.
This commit is contained in:
parent
f532e07a09
commit
6165feaeb7
3 changed files with 19 additions and 6 deletions
|
|
@ -54,6 +54,9 @@ class CRUDService(Generic[T]):
|
||||||
def list(self, params=None) -> list[T]:
|
def list(self, params=None) -> list[T]:
|
||||||
query, root_alias = self.get_query()
|
query, root_alias = self.get_query()
|
||||||
|
|
||||||
|
root_fields = []
|
||||||
|
rel_field_names = {}
|
||||||
|
|
||||||
if params:
|
if params:
|
||||||
if self.supports_soft_delete:
|
if self.supports_soft_delete:
|
||||||
include_deleted = _is_truthy(params.get('include_deleted'))
|
include_deleted = _is_truthy(params.get('include_deleted'))
|
||||||
|
|
@ -73,7 +76,8 @@ class CRUDService(Generic[T]):
|
||||||
isouter=True
|
isouter=True
|
||||||
)
|
)
|
||||||
|
|
||||||
root_fields, rel_field_names = spec.parse_fields()
|
if params:
|
||||||
|
root_fields, rel_field_names = spec.parse_fields()
|
||||||
|
|
||||||
if root_fields:
|
if root_fields:
|
||||||
query = query.options(Load(root_alias).load_only(*root_fields))
|
query = query.options(Load(root_alias).load_only(*root_fields))
|
||||||
|
|
|
||||||
|
|
@ -157,17 +157,26 @@ class CRUDSpec:
|
||||||
for path in self.eager_paths:
|
for path in self.eager_paths:
|
||||||
current = root_alias
|
current = root_alias
|
||||||
loader = None
|
loader = None
|
||||||
|
|
||||||
for idx, name in enumerate(path):
|
for idx, name in enumerate(path):
|
||||||
rel_attr = getattr(current, name)
|
rel_attr = getattr(current, name)
|
||||||
loader = (selectinload(rel_attr) if loader is None else loader.selectinload(name))
|
|
||||||
|
if loader is None:
|
||||||
|
loader = selectinload(rel_attr)
|
||||||
|
else:
|
||||||
|
loader = loader.selectinload(rel_attr)
|
||||||
|
|
||||||
|
current = rel_attr.property.mapper.class_
|
||||||
|
|
||||||
if fields_map and idx == len(path) - 1 and path in fields_map:
|
if fields_map and idx == len(path) - 1 and path in fields_map:
|
||||||
target_cls = rel_attr.property.mapper.class_
|
target_cls = current
|
||||||
cols = [getattr(target_cls, n) for n in fields_map[path] if hasattr(target_cls, n)]
|
cols = [getattr(target_cls, n) for n in fields_map[path] if hasattr(target_cls, n)]
|
||||||
if cols:
|
if cols:
|
||||||
loader = loader.load_only(*cols)
|
loader = loader.load_only(*cols)
|
||||||
current = rel_attr.property.mapper.class_
|
|
||||||
if loader is not None:
|
if loader is not None:
|
||||||
loads.append(loader)
|
loads.append(loader)
|
||||||
|
|
||||||
return loads
|
return loads
|
||||||
|
|
||||||
def get_join_paths(self):
|
def get_join_paths(self):
|
||||||
|
|
|
||||||
|
|
@ -121,7 +121,7 @@ def render_field(field, value):
|
||||||
options=field.get('options', None)
|
options=field.get('options', None)
|
||||||
)
|
)
|
||||||
|
|
||||||
def render_table(objects: List[Any], columns: Optional[List[Dict[str, Any]]] = None):
|
def render_table(objects: List[Any], columns: Optional[List[Dict[str, Any]]] = None, **opts):
|
||||||
env = get_env()
|
env = get_env()
|
||||||
template = get_crudkit_template(env, 'table.html')
|
template = get_crudkit_template(env, 'table.html')
|
||||||
|
|
||||||
|
|
@ -146,7 +146,7 @@ def render_table(objects: List[Any], columns: Optional[List[Dict[str, Any]]] = N
|
||||||
cells.append({"text": text, "href": href, "class": cls})
|
cells.append({"text": text, "href": href, "class": cls})
|
||||||
disp_rows.append({"id": rd.get("id"), "cells": cells})
|
disp_rows.append({"id": rd.get("id"), "cells": cells})
|
||||||
|
|
||||||
return template.render(columns=cols, rows=disp_rows)
|
return template.render(columns=cols, rows=disp_rows, kwargs=opts)
|
||||||
|
|
||||||
def render_form(model_cls, values, session=None):
|
def render_form(model_cls, values, session=None):
|
||||||
env = get_env()
|
env = get_env()
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue