для родителей есть вариант через URLPathHierarchy, получать массив вида
["lvl1=2", "lvl1=2,lvl2=3", "lvl1=2,lvl2=3,lvl3=5"]
и использовать IN на нем, работает ОК. Так же есть вариант с иерархическими словарями (но там надо искусственные ID придумывать).