From 2d670252f27f9632b2731a5a97eddbda85df95e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominic=20K=C3=B6nig?= Date: Mon, 12 Jan 2026 19:53:32 +0100 Subject: [PATCH 1/2] Possible fix for #756 --- pydal/objects.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/pydal/objects.py b/pydal/objects.py index 3b70461f1..cb89ab1dc 100644 --- a/pydal/objects.py +++ b/pydal/objects.py @@ -2542,7 +2542,13 @@ def referenced_field(self): if not self._db or tablename not in self._db: # The table being referenced is not defined yet return None - table = self._db[tablename] + try: + table = self._db[tablename] + except (KeyError, AttributeError): + if tablename == self._tablename: + table = self._table + else: + raise return table[fieldname] if fieldname else table._id def referenced_table(self): From 964c13fdcd78aea49e3ffec6e629dfcfcca4187c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominic=20K=C3=B6nig?= Date: Mon, 12 Jan 2026 20:19:34 +0100 Subject: [PATCH 2/2] Add comment to explain the try-block --- pydal/objects.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pydal/objects.py b/pydal/objects.py index cb89ab1dc..a8be6bb09 100644 --- a/pydal/objects.py +++ b/pydal/objects.py @@ -2545,6 +2545,9 @@ def referenced_field(self): try: table = self._db[tablename] except (KeyError, AttributeError): + # The referenced Table is defined in self._db, but not available yet + # => it could be self._table still being constructed via + # lazy_define_table, with this field being a self-reference if tablename == self._tablename: table = self._table else: