@@ -32,6 +32,14 @@ def to_q(self) -> Q:
3232 # Default to equals
3333 return Q (** {self .field : self .value })
3434
35+ def remap (r : dict [str , any ], remapped : list [str ]):
36+ for f in remapped :
37+ key = f .replace ("_id" , "" )
38+ if key in r :
39+ r [f ] = r [key ]
40+ del r [key ]
41+ return r
42+
3543
3644class DataQuery :
3745 """Represents a query on a specific model with filters."""
@@ -57,25 +65,23 @@ def execute(self, fields: List[str]) -> List[ResolvedEntityData]:
5765 query &= filter_obj .to_q ()
5866
5967 # Execute the query and return the results
60- queryset = model_class .objects .filter (query )
61- # Convert to list of dictionaries with only the requested fields
62- result = []
63- for instance in queryset :
64- entity_data = {}
65- for field in fields :
66- try :
67- value = getattr (instance , field )
68- # Ensure the value is of a compatible type
69- if value is not None and not isinstance (value , (str , int , float , bool )):
70- value = str (value )
71- entity_data [field ] = value
72- except AttributeError :
73- entity_data [field ] = None
74- result .append (entity_data )
75-
68+ # Get all valid field names for the model
69+ valid_field_names = {f .name for f in model_class ._meta .fields }
70+ # Filter out invalid field names.
71+ # First detect fields with _id suffix that should be remapped.
72+ remapped = [f for f in fields if "_id" in f and f not in valid_field_names ]
73+ fields = [f .replace ("_id" , "" ) if f in remapped else f for f in fields ]
74+ valid_fields = [f for f in fields if f in valid_field_names ]
75+ if len (valid_fields ) < len (fields ):
76+ print ("Invalid fields found in query: " )
77+ print ([f for f in fields if f not in valid_fields ])
78+ print ("Expected:" )
79+ print (valid_field_names )
80+ result = list (model_class .objects .filter (query ).values (* valid_fields ))
81+ if len (remapped ) > 0 :
82+ result = [remap (r , remapped ) for r in result ]
7683 return result
7784
78-
7985class DataResolver :
8086 """Resolver for a single data query."""
8187
0 commit comments