Django Category и поиски Подкатегории

Я пытаюсь использовать подобную реализацию Категории для этого в Wiki Django. Я задаюсь вопросом что Django способ сделать поиск для получения по запросу всех объектов, связанных с родительской категорией. Например, если бы у меня есть категория "TV", и она имеет подкатегории "LED", "жидкокристаллический дисплей" и "Плазму", как я смог бы легко запросить для всего ТВ, рекурсивно не проходя все подкатегории и subsubcategories (если существует кто-либо).

Кодируйте мудрый, я думал что-то как:

class Item(models.Model):
   name = ...
   ...
   category = models.ForeignKey(Category, null=True, blank=True)

таким образом с этим типом реализации там какой-либо простой способ сделать то, в чем я нуждаюсь, или есть ли какое-либо другое лучшее решение?

Спасибо!

7
задан Jordan Messina 13 January 2010 в 23:25
поделиться

2 ответа

Если вы хотите обеспечить соблюдение строгих категорий И подкатегории, но также имеют возможность выполнять быстрые поиски с такими результатами, как вы описываете, вы можете сделать таблицу «тега», где вы на самом деле не позволяете пользователям помещать самими элементами, а скорее, как только вы назначите категорию Элемент, который вы заполняете таблицу тегов для этого элемента со всеми родительскими категориями до корневого узла дерева категории.

Например, если у вас есть следующее: 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')

8
ответ дан 6 December 2019 в 19:36
поделиться

Если предположить, что вы используете модель Категория так же, как она используется на странице, на которую вы ссылались, то кажется, что категория "ТВ" будет экземпляром Категория с нулевым значением Родительская категория , а "Плазма" и "ЖК" будут экземплярами Категория с категорией "ТВ" в качестве родительской категории.

>>> 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')

Похоже ли это на то, что вам нужно?

.
5
ответ дан 6 December 2019 в 19:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: