Вот способ, которым база данных сделает всю работу за вас:
farms = qs.values_list('farm', flat=True).distinct()
#values_list() is new in Django 1.0
Возвращаемое значение должно оцениваться примерно так:
(<Farm instance 1>, <Farm instance5>)
где будут фермы с деревьями в этом конкретном наборе запросов.
Для всех ферм с деревьями используйте qs = Tree.objects
Имейте в виду, что если вы добавите order_by('some_other_column')
, то к различным комбинациям 'farm' и 'some_other_column' будут применяться разные, потому что другой столбец также будет в запросе sql для упорядочения. Я думаю, что это ограничение (не предполагаемая функция) в API, оно описано в документации .