diff --git a/crudkit/core/base.py b/crudkit/core/base.py index e612f13..d73a04f 100644 --- a/crudkit/core/base.py +++ b/crudkit/core/base.py @@ -40,14 +40,27 @@ def _safe_get_loaded_attr(obj, name): if st is None: return None try: - attrs = getattr(st, "attrs", {}).get(name) - if attrs is not None and name in attrs: - attr = attrs[name] - val = attr.loaded_value - return None if val is NO_VALUE else val st_dict = getattr(st, "dict", {}) if name in st_dict: - return st_dict.get(name) + return st_dict[name] + + attrs = getattr(st, "attrs", None) + attr = None + if attrs is not None: + try: + attr = attrs[name] + except Exception: + try: + get = getattr(attrs, "get", None) + if callable(get): + attr = get(name) + except Exception: + attr = None + + if attr is not None: + val = attr.loaded_value + return None if val is NO_VALUE else val + return None except Exception: return None