tutorial template tag languages dateformat custom django django-models django-queryset

template - inclusion tags django



Búsqueda de categorías y subcategorías de Django (3)

Si desea imponer categorías y subcategorías estrictas, pero también tiene la capacidad de realizar búsquedas rápidas con resultados como los que describe, puede crear una tabla de "etiquetas" en la que no permita a los usuarios etiquetar elementos, sino más bien como En cuanto asigne una categoría a un artículo, rellena la tabla de etiquetas para ese artículo con todas las categorías principales hasta el nodo raíz del árbol de categorías.

Por ejemplo, si tiene lo siguiente: texto alternativo http://img509.yfrog.com/img509/9845/photoho.jpg

La tabla de etiquetas se vería así:

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

Ahora su queryset se verá como items=Item.objects.filter(tag=''TV'')

Estoy intentando usar una implementación de Categoría similar a esta en Django Wiki. Me pregunto cuál es la forma Django de hacer una búsqueda para extraer todos los objetos asociados con una categoría principal. Por ejemplo, si tengo una categoría "TV" y tiene subcategorías "LED", "LCD" y "Plasma", ¿cómo podría consultar fácilmente todos los televisores sin recurrir a todas las subcategorías y subcategorías (si existen hay alguno).

En cuanto al código, estaba pensando algo así como:

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

Entonces, con este tipo de implementación ¿hay alguna manera fácil de hacer lo que necesito, o hay alguna otra solución mejor?

¡Gracias!


Suponiendo que está utilizando el modelo de Category la misma manera que se usa en la página a la que hizo referencia, parecería que una categoría ''TV'' sería una instancia de Category con un elemento parent nulo, y ''Plasma'' y ''LCD'' serían Category instancias con la categoría ''TV'' como padre.

>>> tv=Category(name="TV") >>> tv.save() >>> lcd=Category(name="LCD", parent=tv) >>> lcd.save() >>> plasma=Category(name="Plasma", parent=tv) >>> plasma.save()

Crea algunos artículos

>>> vizio=Item(name="Vizio", category=lcd) >>> vizio.save() >>> plasmatron=Item(name="PlasmaTron", category=plasma) >>> plasmatron.save()

Obtener el conjunto de preguntas del artículo

>>> items=Item.objects.filter(category__parent=tv)

o

>>>> items=Item.objects.filter(category__parent__name=''TV'')

¿Esto parece estar en el estadio de lo que necesitas?


Si usa django-categories, que usa MPTT, puede hacer lo siguiente:

Entry.objects.filter(category__in=category.get_descendants(True))