Я пытаюсь использовать подобную реализацию Категории для этого в Wiki Django. Я задаюсь вопросом что Django способ сделать поиск для получения по запросу всех объектов, связанных с родительской категорией. Например, если бы у меня есть категория "TV", и она имеет подкатегории "LED", "жидкокристаллический дисплей" и "Плазму", как я смог бы легко запросить для всего ТВ, рекурсивно не проходя все подкатегории и subsubcategories (если существует кто-либо).
Кодируйте мудрый, я думал что-то как:
class Item(models.Model):
name = ...
...
category = models.ForeignKey(Category, null=True, blank=True)
таким образом с этим типом реализации там какой-либо простой способ сделать то, в чем я нуждаюсь, или есть ли какое-либо другое лучшее решение?
Спасибо!
Если вы хотите обеспечить соблюдение строгих категорий И подкатегории, но также имеют возможность выполнять быстрые поиски с такими результатами, как вы описываете, вы можете сделать таблицу «тега», где вы на самом деле не позволяете пользователям помещать самими элементами, а скорее, как только вы назначите категорию Элемент, который вы заполняете таблицу тегов для этого элемента со всеми родительскими категориями до корневого узла дерева категории.
Например, если у вас есть следующее: Alt Text http://img509.yfrog.com/img509/9845/photogo.jpg
The Таблица тегов будет выглядеть что-то вроде:
id | tag_name | tv_id
1 | "tv" | 1
2 | "sd" | 1
3 | "crt" | 1
4 | "tv" | 2
5 | "HD" | 2
6 | "LCD" | 2
7 | "tv" | 3
8 | "HD" | 3
9 | "plasma" | 3
Теперь ваш запрос будет выглядеть элементы = item. .Filter (Tag = 'TV')
Если предположить, что вы используете модель Категория
так же, как она используется на странице, на которую вы ссылались, то кажется, что категория "ТВ" будет экземпляром Категория
с нулевым значением Родительская категория
, а "Плазма" и "ЖК" будут экземплярами Категория
с категорией "ТВ" в качестве родительской категории.
>>> tv=Category(name="TV")
>>> tv.save()
>>> lcd=Category(name="LCD", parent=tv)
>>> lcd.save()
>>> plasma=Category(name="Plasma", parent=tv)
>>> plasma.save()
Создайте некоторые элементы
>>> vizio=Item(name="Vizio", category=lcd)
>>> vizio.save()
>>> plasmatron=Item(name="PlasmaTron", category=plasma)
>>> plasmatron.save()
Получите запрос элемента
>>> items=Item.objects.filter(category__parent=tv)
или
>>>> items=Item.objects.filter(category__parent__name='TV')
Похоже ли это на то, что вам нужно?
.