CRUDKit adjustments and bug fixes.
This commit is contained in:
parent
eef7428c2f
commit
b68dbfc7ae
5 changed files with 26 additions and 13 deletions
|
|
@ -54,6 +54,9 @@ class CRUDService(Generic[T]):
|
|||
def list(self, params=None) -> list[T]:
|
||||
query, root_alias = self.get_query()
|
||||
|
||||
root_fields = []
|
||||
rel_field_names = {}
|
||||
|
||||
if params:
|
||||
if self.supports_soft_delete:
|
||||
include_deleted = _is_truthy(params.get('include_deleted'))
|
||||
|
|
@ -73,7 +76,8 @@ class CRUDService(Generic[T]):
|
|||
isouter=True
|
||||
)
|
||||
|
||||
root_fields, rel_field_names = spec.parse_fields()
|
||||
if params:
|
||||
root_fields, rel_field_names = spec.parse_fields()
|
||||
|
||||
if root_fields:
|
||||
query = query.options(Load(root_alias).load_only(*root_fields))
|
||||
|
|
|
|||
|
|
@ -157,17 +157,26 @@ class CRUDSpec:
|
|||
for path in self.eager_paths:
|
||||
current = root_alias
|
||||
loader = None
|
||||
|
||||
for idx, name in enumerate(path):
|
||||
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:
|
||||
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)]
|
||||
if cols:
|
||||
loader = loader.load_only(*cols)
|
||||
current = rel_attr.property.mapper.class_
|
||||
|
||||
if loader is not None:
|
||||
loads.append(loader)
|
||||
|
||||
return loads
|
||||
|
||||
def get_join_paths(self):
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue