diff --git a/packages/twenty-front/src/modules/object-record/advanced-filter/components/AdvancedFilterRelationTargetFieldSelectMenu.tsx b/packages/twenty-front/src/modules/object-record/advanced-filter/components/AdvancedFilterRelationTargetFieldSelectMenu.tsx index 1f9e94725b3..f12f71aea7f 100644 --- a/packages/twenty-front/src/modules/object-record/advanced-filter/components/AdvancedFilterRelationTargetFieldSelectMenu.tsx +++ b/packages/twenty-front/src/modules/object-record/advanced-filter/components/AdvancedFilterRelationTargetFieldSelectMenu.tsx @@ -62,9 +62,17 @@ export const AdvancedFilterRelationTargetFieldSelectMenu = ({ ? sourceFieldMetadataItem.relation.targetObjectMetadata.id : null; - const { filterableFieldMetadataItems: relationTargetFields } = + const { filterableFieldMetadataItems: allTargetFields } = useFilterableFieldMetadataItems(targetObjectMetadataId ?? ''); + // The backend supports a single hop only. Exclude many-to-one relations + // from the target list so the user can't compose multi-hop traversals + // (e.g. Person → Company → ParentCompany) that the dispatcher would + // collapse back to a filter-by-id on the intermediate relation. + const relationTargetFields = allTargetFields.filter( + (field) => !isManyToOneRelationField(field), + ); + if ( !isDefined(sourceFieldMetadataItem) || !isManyToOneRelationField(sourceFieldMetadataItem)