2014-12-22 2 views
1

Допустим, у меня есть эти модели:Поиск Потомок Комплекты

class Category(MP_Node): 
    name = models.CharField(max_length=30) 

class Item(models.Model): 
    category = models.ForeignKey(Category) 

, и я хотел бы найти все Item сек, принадлежащие к любому descendant данного Category.

Обычно я писал бы category.item_set, но это всего лишь Item s, принадлежащих данному уровню иерархии.

Использование дерева примеров в treebeard tutorial, если элемент принадлежит к «Память ноутбука», как бы я нашел все элементы, принадлежащие потомкам «Компьютерное оборудование», где «Память ноутбуков» является одним из этих потомков?

ответ

1

Я просто была такая же проблема, и понял, как сделать это (рассмотреть его внутри функции get_queryset из ListView):

category = Category.objects.filter(slug=self.kwargs['category']).get() 
descendants = list(category.get_descendants().all()) 
return self.model.objects.select_related('category').filter(category__in=descendants+[category, ]) 

Другой вариант, который я придумал использовал фильтр с «OR ':

from django.db.models import Q 

category = Category.objects.filter(slug=self.kwargs['category']).get() 
descendants = list(category.get_descendants().all()) 
return self.model.objects.select_related('category').filter(Q(category__in=category.get_descendants()) | Q(category=category)) 
Смежные вопросы