Working on Work Log entry settings now.
This commit is contained in:
parent
15d0de44fe
commit
86c4f88b78
5 changed files with 89 additions and 7 deletions
|
|
@ -661,6 +661,30 @@ def _class_for(val: Any, classes: Optional[Dict[str, str]]) -> Optional[str]:
|
|||
key = "none" if val is None else str(val).lower()
|
||||
return classes.get(key, classes.get("default"))
|
||||
|
||||
def _format_label_from_values(spec: Any, values: dict) -> Optional[str]:
|
||||
if not spec:
|
||||
return None
|
||||
if isinstance(spec, (list, tuple)):
|
||||
parts = []
|
||||
for a in spec:
|
||||
v = _deep_get(values, str(a))
|
||||
parts.append("" if v is None else str(v))
|
||||
return " ".join(p for p in parts if p)
|
||||
|
||||
s = str(spec)
|
||||
if "{" in s and "}" in s:
|
||||
names = re.findall(r"{\s*([^}:\s]+)", s)
|
||||
data = {n: _deep_get(values, n) for n in names}
|
||||
# wrap for safe .format()
|
||||
data = {k: ("" if v is None else v) for k, v in data.items()}
|
||||
try:
|
||||
return s.format(**data)
|
||||
except Exception:
|
||||
return None
|
||||
# simple field name
|
||||
v = _deep_get(values, s)
|
||||
return "" if v is None else str(v)
|
||||
|
||||
def _build_href(spec: Dict[str, Any], row: Dict[str, Any], obj) -> Optional[str]:
|
||||
if not spec:
|
||||
return None
|
||||
|
|
@ -915,6 +939,19 @@ def render_form(
|
|||
if vl is not None:
|
||||
f["value_label"] = vl
|
||||
|
||||
for f in fields:
|
||||
# existing FK label resolution
|
||||
vl = _value_label_for_field(f, mapper, values_map, instance, session)
|
||||
if vl is not None:
|
||||
f["value_label"] = vl
|
||||
# NEW: if not a relationship but a label_spec is provided, format from values
|
||||
elif f.get("label_spec"):
|
||||
base, rel_prop = _rel_for_id_name(mapper, f["name"])
|
||||
if not rel_prop: # scalar field
|
||||
vl2 = _format_label_from_values(f["label_spec"], values_map)
|
||||
if vl2 is not None:
|
||||
f["value_label"] = vl2
|
||||
|
||||
# Build rows (supports nested layout with parents)
|
||||
rows_map = _normalize_rows_layout(layout)
|
||||
rows_tree = _assign_fields_to_rows(fields, rows_map)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue