Запрос со сложными условиями в проекте с использованием mptt

У меня есть модель MPT:

class Locations(MPTTModel):
    parent = TreeForeignKey('self', null=True, blank=True, related_name='children')
    type = models.ForeignKey('LocationTypes')
    title = models.CharField(max_length=100)

Некоторые модели, связанные с этим:

class Building(models.Model):
    title = models.CharField(max_length=100)
    location = models.ForeignKey('Locations')

И QuerySet, как это:

building_list = Building.objects.filter(title__icontains='house')

Я знаю некоторую "локацию" "id", но не имеющую прямого отношения к Building, одному из предков. Какой лучший способ оставить в building_list только те элементы, которые являются местоположением одного из потомков (не обязательно прямого) этого "Location"?

1 ответ

Решение

Вы можете получить список потомков, если знаете идентификатор местоположения с помощью функции. get_descendants:

location = Location.objects.get(pk="some_location_id")
descendants = location.get_descendants().values_list('id', flat=True)
building_list = Building.objects.filter(title__icontains='house',
                                        location__in=descendants)
Другие вопросы по тегам