@@ -274,20 +274,53 @@ async def _generate_source_tables_metadata(self) -> List[Dict[str, Any]]:
274274 if isinstance (field , fields .relational .ForeignKeyFieldInstance ):
275275 if not isinstance (field .related_name , str ):
276276 raise HasuraError (f'`related_name` of `{ field } ` must be set' )
277+
277278 related_table_name = model_tables [field .model_name ]
279+ field_name = field .model_field_name
278280 metadata_tables [table_name ]['object_relationships' ].append (
279281 self ._format_object_relationship (
280- name = field . model_field_name ,
281- column = field . model_field_name + '_id' ,
282+ name = field_name ,
283+ column = field_name + '_id' ,
282284 )
283285 )
284286 metadata_tables [related_table_name ]['array_relationships' ].append (
285287 self ._format_array_relationship (
286288 related_name = field .related_name ,
287289 table = table_name ,
288- column = field .model_field_name + '_id' ,
290+ column = field_name + '_id' ,
291+ )
292+ )
293+
294+ elif isinstance (field , fields .relational .ManyToManyFieldInstance ):
295+ if not isinstance (field .related_name , str ):
296+ raise HasuraError (f'`related_name` of `{ field } ` must be set' )
297+
298+ related_table_name = model_tables [field .model_name ]
299+ junction_table_name = field .through
300+
301+ metadata_tables [junction_table_name ] = self ._format_table (junction_table_name )
302+ metadata_tables [junction_table_name ]['object_relationships' ].append (
303+ self ._format_object_relationship (
304+ name = related_table_name ,
305+ column = related_table_name + '_id' ,
289306 )
290307 )
308+ metadata_tables [junction_table_name ]['object_relationships' ].append (
309+ self ._format_object_relationship (
310+ name = table_name ,
311+ column = table_name + '_id' ,
312+ )
313+ )
314+ metadata_tables [related_table_name ]['array_relationships' ].append (
315+ self ._format_array_relationship (
316+ related_name = f'{ related_table_name } _{ field .related_name } ' ,
317+ table = junction_table_name ,
318+ column = related_table_name + '_id' ,
319+ )
320+ )
321+
322+ else :
323+ pass
291324
292325 return list (metadata_tables .values ())
293326
0 commit comments