@@ -204,10 +204,17 @@ def _serialize_detail(self, detail) -> dict[str, Any]:
204204 # Get fields from the model
205205 model_fields = detail ._fields
206206
207+ # Field types that are skipped entirely — check BEFORE reading the
208+ # value so that computed fields of these types are never triggered.
209+ _SKIP_FIELD_TYPES = {"many2many" , "one2many" , "binary" }
210+
207211 for field_name , field in model_fields .items ():
208212 if field_name .startswith ("_" ) or field_name in DETAIL_SKIP_FIELDS :
209213 continue
210214
215+ if field .type in _SKIP_FIELD_TYPES :
216+ continue
217+
211218 value = getattr (detail , field_name )
212219
213220 if field .type == "many2one" :
@@ -230,19 +237,10 @@ def _serialize_detail(self, detail) -> dict[str, Any]:
230237 }
231238 else :
232239 result [field_name ] = value .name if hasattr (value , "name" ) else str (value .id )
233- elif field .type == "many2many" :
234- # Skip many2many for now
235- continue
236- elif field .type == "one2many" :
237- # Skip one2many for now
238- continue
239240 elif field .type == "date" :
240241 result [field_name ] = value .isoformat () if value else None
241242 elif field .type == "datetime" :
242243 result [field_name ] = value .isoformat () if value else None
243- elif field .type == "binary" :
244- # Skip binary fields in API
245- continue
246244 else :
247245 result [field_name ] = value
248246
0 commit comments