get queryset django-mptt

у меня есть модель

class Order(MPTTModel):
    executor = models.ManyToManyField(CustomUser, verbose_name='Исполнитель', related_name='executor')
    initiator = models.ForeignKey(
    CustomUser, on_delete=models.SET_NULL, null=True, related_name='initiator', verbose_name='Инициатор'
)
    parent = TreeForeignKey('self', related_name='children', on_delete=models.SET_NULL, blank=True, null=True)
    description = models.CharField(max_length=300, verbose_name='Подробная информация')

До появления поля parent у меня был queryset:

return Order.objects.filter(
        Q(initiator=request.user) | Q(executor=request.user)
    ).distinct()

Как мне исправить фильтр чтобы возвращалось все дерево если user есть хотя бы в одном узле?


Ответы (1 шт):

Автор решения: diosio

Кажется я решил эту проблему

def get_queryset_descendants(obj, nodes):
    if not nodes:
        return obj.objects.none()
    filters = []
    for n in nodes:
        filters.append(Q(tree_id=n.tree_id))
    return obj.objects.filter(reduce(operator.or_, filters))
→ Ссылка