2013-05-14 4 views
0

im пытается узнать python/django на данный момент и столкнулся с следующей проблемой. Скажем, у меня есть 3 модели:Получите все «грандиозные» дети этой модели

Model Category(models.Model) 
    name = models.Charfield(max_length64) 

Model Subcategory(models.Model) 
    category = models.ForeignKey(Category) 
    name  = models.Charfield(max_length64) 

Model Animal(models.Model) 
    subcategory = models.ForeignKey(Subcategory) 
    name = models.Charfield(max_length64) 

Сейчас, к примеру, если кто-то ищет категории, я хочу, чтобы все животные, которые находятся в любой из подкатегорий данной основной категории. (Надеюсь, что это не слишком сложно)

Итак, теперь мой вопрос - это самый эффективный способ сделать это?

Заранее благодарен!

+1

Если ваша логика и потребности в вложенности становятся более сложными, вы должны заглянуть в django-mptt для хранения данных такого типа. Пара уровней не имеет ничего общего, но как только вы начинаете глубже, лучше иметь более надежную систему. – John

ответ

2

Вы можете сделать запрос следующим образом:

animals = Animal.objects.filter(subcategory__category__id=category_id) 

ИЛИ, Если у вас есть доступ к категории объекта,

animals = Animal.objects.filter(subcategory__category=category) 

Обратите внимание, что определение модели объект class <ClassName> и не Model <ClassName> Пример: Model Animal должно быть class Animal

+0

Спасибо :) Thats it – phil

1

Я бы сделал это со следующим запросом:

animals = Animal.objects.filter(subcategory__category=category) 
+0

Большое спасибо. Это именно то, что я искал! – phil

Смежные вопросы